Recherche…
Introduction
Iota permet de déclarer des constantes numériques à partir d'une valeur de départ qui augmente de manière monotone. Iota peut être utilisé pour déclarer des masques de bits souvent utilisés dans la programmation système et réseau et d'autres listes de constantes avec des valeurs associées.
Remarques
L'identifiant iota
est utilisé pour attribuer des valeurs à des listes de constantes. Lorsque iota est utilisé dans une liste, il commence par une valeur de zéro et s'incrémente d'une valeur pour chaque valeur de la liste de constantes. Il est réinitialisé pour chaque mot clé const
. Contrairement aux énumérations des autres langues, iota peut être utilisé dans des expressions (par exemple, iota + 1
), ce qui permet une plus grande flexibilité.
Utilisation simple de iota
Pour créer une liste de constantes - attribuez une valeur iota
à chaque élément:
const (
a = iota // a = 0
b = iota // b = 1
c = iota // c = 2
)
Pour créer une liste de constantes de manière raccourcie, affectez la valeur iota
au premier élément:
const (
a = iota // a = 0
b // b = 1
c // c = 2
)
Utilisation de iota dans une expression
iota
peut être utilisé dans des expressions, il peut donc également être utilisé pour affecter des valeurs autres que de simples entiers incrémentés à partir de zéro. Pour créer des constantes pour les unités SI, utilisez cet exemple 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
)
Valeurs de saut
La valeur de iota
est toujours incrémentée pour chaque entrée d'une liste de constantes, même si iota n'est pas utilisé:
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
)
il sera également incrémenté même si aucune constante n'est créée, ce qui signifie que l'identifiant vide peut être utilisé pour ignorer complètement les valeurs:
const (
a = iota // a = 0
_ // iota is incremented
b // b = 2
)
Le premier bloc de code a été extrait de Go Spec (CC-BY 3.0).
Utilisation de iota dans une liste d'expressions
Comme iota
est incrémenté après chaque ConstSpec
, les valeurs de la même liste d'expressions auront la même valeur pour 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
)
Cet exemple provient de Go Spec (CC-BY 3.0).
Utilisation de iota dans un masque
Iota peut être très utile lors de la création d'un masque de bits. Par exemple, pour représenter l'état d'une connexion réseau qui peut être sécurisée, authentifiée et / ou prête, nous pouvons créer un masque comme celui-ci:
const (
Secure = 1 << iota // 0b001
Authn // 0b010
Ready // 0b100
)
ConnState := Secure|Authn // 0b011: Connection is secure and authenticated, but not yet Ready
Utilisation de iota dans const
Ceci est une énumération pour la création de const. Le compilateur Go démarre iota à partir de 0 et s'incrémente d'une unité pour chaque constante suivante. La valeur est déterminée au moment de la compilation plutôt que lors de l'exécution. Pour cette raison, nous ne pouvons pas appliquer iota aux expressions qui sont évaluées au moment de l'exécution.
Programme pour utiliser iota dans 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)
}
Essayez-le dans Go Playground