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