Golangでmap(連想配列)の作り方
まず、前提としてGolangでは連想配列のことをmapと言うので、以後は連想配列のことをmapとだけ記します。
【明示的にmap型を定義する場合】
var 変数名 map[keyの型]valueの型 = map[keyの型]valueの型{key: value}
【暗黙的にmap型を定義する場合】
変数名 := map[keyの型]valueの型{key: value}
map(連想配列)の使い方
mapを定義(作成)する
keyが文字列、valueが数値であるmapを作成し、出力してみます。
package main
import (
"fmt"
)
func main() {
var fruitsPrice map[string]int = map[string]int{"orange": 40, "apple": 60, "banana": 10}
fmt.Println(fruitsPrice)
}
実行結果
map[apple:60 banana:10 orange:40]
出力される際はkeyがアルファベット順で表示されます。
mapの中身を取り出す
map内の要素(value)を取り出したい時は
変数[key]
の形式で書けば取得できます。
map内のvalueを1つずつ取り出して出力してみます。
package main
import (
"fmt"
)
func main() {
var fruitsPrice map[string]int = map[string]int{"orange": 40, "apple": 60, "banana": 10}
fmt.Println(fruitsPrice["orange"])
fmt.Println(fruitsPrice["apple"])
fmt.Println(fruitsPrice["banana"])
}
実行結果は以下の通り
40
60
10
keyが存在する時・しない時の挙動
Golangのmapに対してkeyを指定すると、そのkeyに対するvalueが取得できるだけでなく、2つ目の返り値にはkeyが存在しているかしてないかがboolean値で返ってきます。
【map内に指定したkeyが存在する場合】
var fruitsPrice map[string]int = map[string]int{"orange": 40, "apple": 60, "banana": 10}
price, isPresent := fruitsPrice["orange"]
fmt.Println(price) // 40
fmt.Println(isPresent) // true
【map内に指定したkeyが存在しない場合】
var fruitsPrice map[string]int = map[string]int{"orange": 40, "apple": 60, "banana": 10}
price, isPresent := fruitsPrice["grape"]
fmt.Println(price) // 0
fmt.Println(isPresent) // false
keyが存在しない場合は、エラーを出力してその時点でプログラムを終了させる処理にすると、以下のようになります。
package main
import (
"fmt"
"log"
)
func main() {
var fruitsPrice map[string]int = map[string]int{"orange": 40, "apple": 60, "banana": 10}
price1, isPresent := fruitsPrice["apple"]
if !isPresent {
log.Fatalln("[ERROR]: みかんが存在しません")
}
fmt.Println(price1)
price2, isPresent := fruitsPrice["grape"]
if !isPresent {
log.Fatalln("[ERROR]: ぶどうが存在しません") // ここでプログラミムが止まるはず
}
fmt.Println(price2)
price3, isPresent := fruitsPrice["apple"]
if !isPresent {
log.Fatalln("[ERROR]: りんごが存在しません")
}
fmt.Println(price3)
price4, isPresent := fruitsPrice["banana"]
if !isPresent {
log.Fatalln("[ERROR]: バナナが存在しません")
}
fmt.Println(price4)
}
出力結果
60
2021/11/21 21:06:10 [ERROR]: ぶどうが存在しません
exit status 1
fruitsPrice[“grape”]が存在しないため、直後のif文の中身が実行され、その時点でプログラムが終了してますね。