Go公式WikiのIotaの日本語意訳になります。
(元記事の最終更新日: 2015/11/08 rev.4)
定数宣言で使用するiota
についての説明が載っています。
Iota
概要
Go言語のiota
は、数値のインクリメント定義を簡単に行うためのconst
宣言で使われる識別子です。iota
は式として使われるため、単純な列挙よりも一般性を提供します。
iotaの値は、予約語const
がソースコードに現れたとき(例: 各constブロック)はいつでも数値のゼロにリセットし、各定数仕様(例: 各行ごと)の後に1つずつインクリメントします。
これは簡略定数表記(定数名の右側に置かれる値や型の省略)と組み合わせて、関連した定数をとても簡潔に定義できます。
- Iota: http://golang.org/doc/go_spec.html#Iota
- 定数宣言: http://golang.org/doc/go_spec.html#Constant_declarations
例
公式仕様に良い例が2つ載っています。
http://golang.org/doc/go_spec.html#Iota
以下はEffective Goから抜粋したものになります。
type ByteSize float64
const (
_ = iota // ブランク識別子へ代入し、最初の値は無視する
KB ByteSize = 1 << (10 * iota)
MB
GB
TB
PB
EB
ZB
YB
)
訳注: 公式仕様に載っている例も以下に掲載します。
const ( // (各constブロックごとに)iota は 0 にリセットします
c0 = iota // c0 == 0
c1 = iota // c1 == 1
c2 = iota // c2 == 2
)
const ( // (各constブロックごとに)iota は 0 にリセットします
a = 1 << iota // a == 1
b = 1 << iota // b == 2
c = 3 // c == 3 (iotaは使われていませんが、インクリメントは続いています)
d = 1 << iota // d == 8
)
const ( // (各constブロックごとに)iota は 0 にリセットします
u = iota * 42 // u == 0 (*1 型付けされていない整数型)
v float64 = iota * 42 // v == 42.0 (float64型)
w = iota * 42 // w == 84 (*1 型付けされていない整数型)
)
const x = iota // x == 0 (iotaで0にリセット)
const y = iota // y == 0 (iotaで0にリセット)
const (
bit0, mask0 = 1 << iota, 1<<iota - 1 // bit0 == 1, mask0 == 0
bit1, mask1 // bit1 == 2, mask1 == 1
_, _ // (iota == 2 をスキップ)
bit3, mask3 // bit3 == 8, mask3 == 7
)
comments powered by Disqus訳注: *1 型付けされていない定数については公式ブログの記事を確認してみてください。
簡単な振る舞いについてはGo PlayGroundで確認できます。