Szukaj…
Wprowadzenie
Iota zapewnia sposób deklarowania stałych liczbowych od wartości początkowej, która rośnie monotonicznie. Iota może służyć do deklarowania mas bitowych, które są często używane w programowaniu systemowym i sieciowym oraz innych listach stałych o powiązanych wartościach.
Uwagi
Identyfikator iota
służy do przypisywania wartości do list stałych. Gdy iota jest używane na liście, zaczyna się od wartości zero i zwiększa się o jeden dla każdej wartości na liście stałych i jest resetowane dla każdego słowa kluczowego const
. W przeciwieństwie do wyliczeń innych języków, iota może być używana w wyrażeniach (np. iota + 1
), co pozwala na większą elastyczność.
Proste użycie iota
Aby utworzyć listę stałych - przypisz wartość iota
do każdego elementu:
const (
a = iota // a = 0
b = iota // b = 1
c = iota // c = 2
)
Aby utworzyć listę stałych w skróty - przypisz wartość iota
do pierwszego elementu:
const (
a = iota // a = 0
b // b = 1
c // c = 2
)
Używanie iota w wyrażeniu
iota
może być używana w wyrażeniach, więc może także służyć do przypisywania wartości innych niż proste liczby całkowite zaczynające się od zera. Aby utworzyć stałe dla jednostek SI, skorzystaj z tego przykładu z 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
)
Pomijanie wartości
Wartość iota
jest nadal zwiększana dla każdego wpisu na stałej liście, nawet jeśli nie jest używane:
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
)
będzie również zwiększany, nawet jeśli nie zostanie utworzona żadna stała, co oznacza, że pusty identyfikator można wykorzystać do całkowitego pominięcia wartości:
const (
a = iota // a = 0
_ // iota is incremented
b // b = 2
)
Pierwszy blok kodu został pobrany z Go Spec (CC-BY 3.0).
Użycie iota na liście wyrażeń
Ponieważ wartość iota
jest zwiększana po każdym ConstSpec
, wartości na tej samej liście wyrażeń będą miały tę samą wartość dla 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
)
Ten przykład pochodzi z Go Spec (CC-BY 3.0).
Wykorzystanie jota w masce bitowej
Iota może być bardzo przydatny podczas tworzenia maski bitowej. Na przykład, aby przedstawić stan połączenia sieciowego, które może być bezpieczne, uwierzytelnione i / lub gotowe, możemy utworzyć maskę bitów, jak poniżej:
const (
Secure = 1 << iota // 0b001
Authn // 0b010
Ready // 0b100
)
ConnState := Secure|Authn // 0b011: Connection is secure and authenticated, but not yet Ready
Zastosowanie iota w const
To jest wyliczenie dla tworzenia stałych. Kompilator Go uruchamia iota od 0 i zwiększa o jeden dla każdej kolejnej stałej. Wartość jest określana w czasie kompilacji, a nie w czasie wykonywania. Z tego powodu nie możemy zastosować iota do wyrażeń, które są oceniane w czasie wykonywania.
Program do użycia iota w 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)
}
Wypróbuj w Go Playground