しかし、Go には Zero-Value といって変数を初期化する際に明示的に値を代入しない場合、デフォルトで割り当てられる値が決まっています。例えば int 型の変数の場合「0」です。 すると iota は「0」から始まる連続する整数を生成する識別子であるため、上で宣言した a がデフォルト値でもない限り、変数を初期化する際に明示的に値を指定していないにも関わらずデフォルト値でもない a で勝手に初期化されてしまっている状態が発生します。 文章では少し伝わりにくいと思うのでコードで示すと type S struct { T Type } func main() { s := S{} switch s.T { case a: fmt.Println("a") // <- 実際にはここを通る case b: fmt.Println("b") case c: fmt.Println("b")