有効かどうかわからないキーでmapに値をアクセスする
golangのmapはPythonのdictよりRubyのHashに近くて、無効なキーでアクセスしてもpanicしたりせず、各型の初期値を返すようです。map[string] stringならば、""を返すし、map[string] intなら0です。map[string] *Typeならnil。最後のケースを、次のコードで確認しました。
package main import "fmt" func main() { str1 := "abc" str2 := "def" m := map[string]*string { "a":&str1, "b":&str2} c := m["c"] if c == nil { fmt.Printf("nil\n") } else { fmt.Printf("not nil\n") } //=> "nil\n" }
コードでは、無効なキーのみ調べてますが、有効かどうか分からないキーにアクセスするとき、ぼくは有効な場合はどうなるか知っていましたが、無効なときどうなるのか不明だったので、調べる必要がありました。