Buscar..
Introducción
Iota proporciona una forma de declarar constantes numéricas a partir de un valor inicial que crece monótonamente. Iota se puede usar para declarar máscaras de bits que se usan a menudo en la programación de redes y sistemas y otras listas de constantes con valores relacionados.
Observaciones
El identificador iota
se utiliza para asignar valores a listas de constantes. Cuando se usa iota en una lista, comienza con un valor de cero, y se incrementa en uno para cada valor en la lista de constantes y se restablece en cada palabra clave const
. A diferencia de las enumeraciones de otros idiomas, iota se puede usar en expresiones (por ejemplo, iota + 1
) que permite una mayor flexibilidad.
Uso simple de iota
Para crear una lista de constantes, asigne un valor iota
a cada elemento:
const (
a = iota // a = 0
b = iota // b = 1
c = iota // c = 2
)
Para crear una lista de constantes de forma abreviada, asigne un valor de iota
al primer elemento:
const (
a = iota // a = 0
b // b = 1
c // c = 2
)
Usando iota en una expresión
iota
se puede usar en expresiones, por lo que también se puede usar para asignar valores que no sean simples enteros incrementales a partir de cero. Para crear constantes para unidades SI, use este ejemplo de Effective Go :
type ByteSize float64
const (
_ = iota // ignore first value by assigning to blank identifier
KB ByteSize = 1 << (10 * iota)
MB
GB
TB
PB
EB
ZB
YB
)
Valores de salto
El valor de iota
aún se incrementa para cada entrada en una lista constante, incluso si no se usa iota:
const ( // iota is reset to 0
a = 1 << iota // a == 1
b = 1 << iota // b == 2
c = 3 // c == 3 (iota is not used but still incremented)
d = 1 << iota // d == 8
)
también se incrementará incluso si no se crea una constante, lo que significa que el identificador vacío se puede usar para omitir valores por completo:
const (
a = iota // a = 0
_ // iota is incremented
b // b = 2
)
El primer bloque de código se tomó de Go Spec (CC-BY 3.0).
Uso de iota en una lista de expresiones.
Debido a que iota
se incrementa después de cada ConstSpec
, los valores dentro de la misma lista de expresiones tendrán el mismo valor para iota
:
const (
bit0, mask0 = 1 << iota, 1<<iota - 1 // bit0 == 1, mask0 == 0
bit1, mask1 // bit1 == 2, mask1 == 1
_, _ // skips iota == 2
bit3, mask3 // bit3 == 8, mask3 == 7
)
Este ejemplo fue tomado de Go Spec (CC-BY 3.0).
Uso de iota en una máscara de bits.
Iota puede ser muy útil al crear una máscara de bits. Por ejemplo, para representar el estado de una conexión de red que puede ser segura, autenticada y / o lista, podríamos crear una máscara de bits como la siguiente:
const (
Secure = 1 << iota // 0b001
Authn // 0b010
Ready // 0b100
)
ConnState := Secure|Authn // 0b011: Connection is secure and authenticated, but not yet Ready
Uso de iota en const.
Esta es una enumeración para la creación de const. Ir compilador inicia iota desde 0 e incrementa en uno para cada constante siguiente. El valor se determina en tiempo de compilación en lugar de tiempo de ejecución. Debido a esto, no podemos aplicar iota a las expresiones que se evalúan en tiempo de ejecución.
Programa para usar iota en const.
package main
import "fmt"
const (
Low = 5 * iota
Medium
High
)
func main() {
// Use our iota constants.
fmt.Println(Low)
fmt.Println(Medium)
fmt.Println(High)
}
Pruébalo en Go Playground