本文へスキップ
BecomeCoder

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

スライスとマップを組み合わせる

ブラウザで完結

導入

実際のデータは、スライスとマップを組み合わせて表します。「複数人ぶんの、名前と点数のまとまり」を作ってみましょう。

説明

マップを要素に持つスライスで、表のようなデータを表現できます。

package main

import "fmt"

func main() {
    people := []map[string]string{
        {"name": "田中", "city": "東京"},
        {"name": "鈴木", "city": "大阪"},
    }

    for _, p := range people {
        fmt.Printf("%s さんは %s 在住\n", p["name"], p["city"])
    }
}
  • []map[string]string … 「マップのスライス」。1行が1人ぶんのマップに対応します。
  • for _, p := range people で1人ずつ取り出し、p["name"] でその人の値を引きます。

実行結果:

田中 さんは 東京 在住
鈴木 さんは 大阪 在住

このように「並び(スライス)」と「対応表(マップ)」を組み合わせれば、たいていのデータは表せます。とはいえ、次章で学ぶ 構造体 を使うと、こうしたデータをもっと安全で読みやすく書けます。

やってみよう

people に3人目 {"name": "佐藤", "city": "名古屋"} を足すと、ループがそのまま3人ぶん回ります。データを足しても処理のコードを変えずに済むのが、ループで回すことの利点です。

実際に動かしてみよう

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

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

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