今回はgolangにおけるmapについて解説していきます。
mapとは
golangのmapはキーと値を保持するために使う、データ構造の一つとなっています。
mapの定義は以下のように宣言します。
a := map[string]int{"pen": 200, "eraser": 100}
fmt.Println(a)
map[キーのデータ型]値のデータ型{要素}のように定義します。今回はキーがstring、値はintとなるマップにそれぞれpenとeraserの要素を入れています。
Println()の結果はmap[eraser:100 pen:200]となります。
また以下のようにa[“pen”]とするとkeyがpenの値を取得することもできます。
a := map[string]int{"pen": 200, "eraser": 100}
fmt.Println(a["pen"])
こちらのPrintln()は200と出力されます。
mapの値の変更
次にmapの値を変更する場合です。
今回はkeyがpenの値を200→500に変更します。
a := map[string]int{"pen": 200, "eraser": 100}
a["pen"] = 500
fmt.Println(a)
こちらのPrintln()は500と出力されます。
mapへの要素の追加
次にmapへ要素を追加する方法です。
以下のように新たにkeyを設定して値を代入してあげます。
a := map[string]int{"pen": 200, "eraser": 100}
a["scissors"] = 300
fmt.Println(a)
Println()はmap[eraser:100 pen:200 scissors:300]を出力されます。
mapに要素が存在するか確認
次にmapに特定の要素が存在するかどうか確認する方法です。
a := map[string]int{"pen": 200, "eraser": 100}
v, check := a["pen"]
fmt.Println(v, check)
keyがpenの値をvとcheckという二つの変数に格納します。
この実行結果は200 trueとなります。keyがpenの値が入っているということをtrueとして返してくれます。
a := map[string]int{"pen": 200, "eraser": 100}
v, check := a["no"]
fmt.Println(v, check)
値がないものは0 falseと出力され、値が入っていないため0、そしてfalseが入ります。
mapの初期化
以前スライスの初期化で解説したものと同様にmapもmake()を使って初期化することができます。
以下のようにkeyがstring、vakueがintのmapをmake()関数に引数で渡して初期化をします。
a := make(map[string]int)
a["pen"] = 1000
fmt.Println(a)
これの実行結果はmap[pen:1000]をkeyがpen、valueが1000がmapに入っていることが分かります。
make()を使わずにvarでmapを定義する際は注意が必要です。
var a map[string]int
a["pen"] = 1000
fmt.Println(a)
これの実行結果はpanicを起こし、エラーとなります。mapの宣言は出来ていますが、メモリ上にmapがないため、そこに値を入れようとしたときにpanicを起こすので、注意が必要です。
golangをもっと詳しくなりたい方に
golang学習のために筆者が実際に受講したUdemy教材をまとめています。
golang学習のために筆者が実際に読んでおすすめしたい本をまとめています。