Go の列挙子
enum (enumerator の略) は、意味のある名前でありながら単純で明確な値を持つ定数の複雑なグループを設計するために使用されます。
Go には、enum データ型はありません。事前定義された識別子 iota を使用し、enums は厳密に型指定されていません。
Go で iota を使用して enums を表する
iota は、自動インクリメント番号の宣言を簡素化できる定数識別子です。ゼロベースの整数定数を示します。
iota キーワードは、数値定数 0, 1, 2,... を表します。const という用語はソースコードに表示され、0 にリセットされ、const の指定ごとに増加します。
package main
import "fmt"
const (
a = iota
b = iota
c = iota
)
func main() {
fmt.Println(a, b, c)
}
出力:
0 1 2
Go で iota を使用して番号宣言を自動インクリメントする
この方法を使用すると、各定数の前にシーケンシャル iota を配置することを回避できます。
package main
import "fmt"
const (
a = iota
b
c
)
func main() {
fmt.Println(a, b, c)
}
出力:
0 1 2
Go で iota を使用して共通の動作を作成する
Direction という名前の単純な enum を定義します。これには、"east"、"west"、"north"、"south"の 4つの潜在的な値があります。
package main
import "fmt"
type Direction int
const (
East = iota + 1
West
North
South
)
// Giving the type a String method to create common behavior
func (d Direction) String() string {
return [...]string{"East", "West", "North", "South"}[d-1]
}
// Giving the type an EnumIndex function allows you to provide common behavior.
func (d Direction) EnumIndex() int {
return int(d)}
func main() {
var d Direction = West
fmt.Println(d)
fmt.Println(d.String())
fmt.Println(d.EnumIndex())
}
出力:
West
West
2
チュートリアルを楽しんでいますか? <a href="https://www.youtube.com/@delftstack/?sub_confirmation=1" style="color: #a94442; font-weight: bold; text-decoration: underline;">DelftStackをチャンネル登録</a> して、高品質な動画ガイドをさらに制作するためのサポートをお願いします。 Subscribe