サーチ…


前書き

Iotaは、単調に増加する開始値から数値定数を宣言する方法を提供します。 Iotaは、システムやネットワークプログラミングで頻繁に使用されるビットマスクや関連する値を持つ定数のリストを宣言するために使用できます。

備考

iota識別子は、定数のリストに値を割り当てるために使用されます。 iotaがリストで使用されると、値のゼロから始まり、定数リストの各値に対して1ずつ増分され、各constキーワードごとにリセットされます。他の言語の列挙とは異なり、柔軟性を高める式( iota + 1 )でiota + 1を使用できます。

簡単なイオタの使用

定数リストを作成するには、各要素にiota値を代入します。

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

短縮された方法で定数リストを作成するには - 最初の要素にiota値を代入する:

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

iotaを式で使用する

iotaは式で使用できるので、ゼロから始まる単純増分整数以外の値を代入するためにも使用できます。 SI単位の定数を作成するには、 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
)

スキップ値

iotaの値は、 iotaが使用されていなくても、定数リストの各エントリごとに増分されます。

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
)

定数が全く作成されない場合でもインクリメントされます。空の識別子を使用して値を完全にスキップすることができます。

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

最初のコードブロックは、 Go Spec (CC-BY 3.0)から取得されました。

式リストでのiotaの使用

iotaは各ConstSpec後にインクリメントされるため、同じ式リスト内の値は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
)

この例はGo Spec (CC-BY 3.0)のものです。

ビットマスクでのiotaの使用

Iotaは、ビットマスクを作成するときに非常に便利です。例えば、セキュアであるか、認証されているか、および/または準備ができているかもしれないネットワーク接続の状態を表すために、以下のようなビットマスクを作成するかもしれない:

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

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

constでのiotaの使用

これはconst作成の列挙です。 Goコンパイラは、iotaを0から開始し、続く各定数に対して1ずつ増分します。値は実行時ではなくコンパイル時に決定されます。このため、実行時に評価される式にiotaを適用することはできません。

constでiotaを使用するプログラム

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)
}

Go Playgroundで試してみてください



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow