本文へスキップ
BecomeCoder

Goコース · 第3章 配列・スライス・マップ · レッスン11

マップ ― キーと値の対応表

ブラウザで完結

導入

「名前 → 点数」のように、キーで値を引きたいときは マップ(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 で頻出のイディオムです。

実際に動かしてみよう

下のエディタにGoを書いて「実行」を押すと、学習用シミュレータが fmt の出力を表示します(本物のGoコンパイラではなく、教材の範囲を再現した軽量エンジンです)。スライス・マップ・構造体・インターフェース・goroutine/channel なども動きます。本文の例を書き換えて動かしてみましょう(並行処理の実行順は決定的に再現しているため、本物のインターリーブとは異なる場合があります)。

Go — ブラウザ内で実行(学習用シミュレータ)

Goの教材サブセットを動かす学習用シミュレータを読み込みます(本物のGoコンパイラではなく、動きを再現した軽量な自作エンジンです)。
スクロールして表示された時点でも自動で読み込まれます。