型switch
型switch時に使うi.(type)
の書き方はswitch構文時にしか使えない。ヒラで使うと invalid syntax tree: use of .(type) outside type switch
のように怒られる。
型switchイディオム
型switchのイディオムとして対象の変数と同名の新しい変数を使うやり方が紹介されている
switch v := v.(type) {
case int:
fmt.Println(v + 1)
case string:
fmt.Println(strings.ToUpper(v))
default:
fmt.Printf("unknown %T\n", v)
}
このケースでは、外側のvを別のvでシャドーしているので、switchを抜けると外側のvに安全に戻ることが出来る。
ただし、当然ながらswitchの内側で外側のvを参照したい場合は同じ変数名を使わない