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



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow