サーチ…
前書き
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で試してみてください