導入
「名前 → 点数」のように、キーで値を引きたいときは マップ(map) を使います。他言語の辞書・連想配列に当たります。
説明
package main
import "fmt"
func main() {
scores := map[string]int{
"田中": 80,
"鈴木": 92,
}
fmt.Println(scores["鈴木"]) // 92
scores["佐藤"] = 70 // 追加
scores["田中"] = 85 // 上書き
// キーが無いときの安全な取り出し方
v, ok := scores["山田"]
if ok {
fmt.Println("山田:", v)
} else {
fmt.Println("山田さんのデータはありません")
}
}
map[string]int… 「キーがstring、値がint」のマップという意味。scores["鈴木"]… キーで値を取り出す。存在しないキーを引くと、値のゼロ値(int なら0)が返ります。v, ok := scores["山田"]… 2つ目のokに「キーが存在したか」の真偽値が入ります。これで「値が 0 なのか、そもそも無いのか」を区別できます。
やってみよう
scores["存在しない名前"] は、エラーにはならず 0 を返します。「本当に 0 点なのか、データが無いのか」を見分けるには、v, ok := scores[...] の ok を必ず確認します。これは Go で頻出のイディオムです。