読者です 読者をやめる 読者になる 読者になる

有効かどうかわからないキーで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"
}

コードでは、無効なキーのみ調べてますが、有効かどうか分からないキーにアクセスするとき、ぼくは有効な場合はどうなるか知っていましたが、無効なときどうなるのか不明だったので、調べる必要がありました。