Suche…


Einführung

Iota bietet eine Möglichkeit, numerische Konstanten aus einem Startwert zu deklarieren, der monoton wächst. Iota kann verwendet werden, um Bitmasken zu deklarieren, die häufig in der System- und Netzwerkprogrammierung verwendet werden, sowie andere Listen von Konstanten mit zugehörigen Werten.

Bemerkungen

Der iota Bezeichner wird verwendet, um Listen von Konstanten Werte zuzuweisen. Wenn iota in einer Liste verwendet wird, beginnt es mit einem Wert von Null und wird für jeden Wert in der Liste der Konstanten um eins erhöht und für jedes const Schlüsselwort zurückgesetzt. Im Gegensatz zu den Aufzählungen anderer Sprachen kann iota in Ausdrücken (z. B. iota + 1 ) verwendet werden, was eine größere Flexibilität ermöglicht.

Einfache Verwendung von Iota

Um eine Liste von Konstanten zu erstellen, weisen Sie jedem Element einen iota Wert zu:

const (
  a = iota // a = 0
  b = iota // b = 1
  c = iota // c = 2
)

Um eine Liste von Konstanten auf eine verkürzte Weise zu erstellen, weisen Sie dem ersten Element einen iota Wert zu:

const (
  a = iota // a = 0
  b        // b = 1
  c        // c = 2
)

Verwenden von Iota in einem Ausdruck

iota kann in Ausdrücken verwendet werden. iota kann es auch verwendet werden, um andere Werte als einfache inkrementierende Ganzzahlen ab Null zuzuweisen. Um Konstanten für SI-Einheiten zu erstellen, verwenden Sie dieses Beispiel aus 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
)

Werte überspringen

Der Wert von iota wird weiterhin für jeden Eintrag in einer konstanten Liste erhöht, auch wenn Iota nicht verwendet wird:

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
)

es wird auch dann inkrementiert, wenn überhaupt keine Konstante erstellt wird, dh der leere Bezeichner kann zum vollständigen Überspringen von Werten verwendet werden

const (
  a = iota // a = 0
  _        // iota is incremented
  b        // b = 2
)

Der erste Codeblock wurde der Go-Spezifikation (CC-BY 3.0) entnommen.

Verwendung von Iota in einer Ausdrucksliste

Da iota nach jeder ConstSpec inkrementiert ConstSpec , haben Werte in derselben Ausdrucksliste denselben Wert für 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
)

Dieses Beispiel wurde der Go-Spezifikation (CC-BY 3.0) entnommen.

Verwendung von Iota in einer Bitmaske

Iota kann beim Erstellen einer Bitmaske sehr nützlich sein. Um beispielsweise den Status einer Netzwerkverbindung darzustellen, die sicher, authentifiziert und / oder betriebsbereit sein kann, erstellen wir möglicherweise eine Bitmaske wie die folgende:

const (
    Secure = 1 << iota // 0b001
    Authn              // 0b010
    Ready              // 0b100
)

ConnState := Secure|Authn // 0b011: Connection is secure and authenticated, but not yet Ready

Verwendung von Iota in const

Dies ist eine Aufzählung für die Erstellung von const. Der Go-Compiler startet Iota von 0 und erhöht sich für jede folgende Konstante um eins. Der Wert wird zur Kompilierungszeit und nicht zur Laufzeit bestimmt. Aus diesem Grund können wir Iota nicht auf Ausdrücke anwenden, die zur Laufzeit ausgewertet werden.

Programm zur Verwendung von Iota in 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)
}

Versuchen Sie es in Go Playground



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow