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



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow