Goのmapはkey:valueの配列で構成されており、Pythonの辞書に似ている。ほぼ辞書と同等の使い方ができるようだが、若干挙動が異なる。
map定義の構文は以下の通り。
map[keyの型名]値の型名{key: value, key: value, ..., key: value}
map1.go
package main
import "fmt"
func main() {
//mapの基本
city := map[string]int{"NY": 100, "London": 200, "Tokyo": 300, "Bangkok": 400}
fmt.Println(city)
}
結果
出力の順番は保証されない(記述した順番通りに出力されない)。
map[Bangkok:400 London:200 NY:100 Tokyo:300]
次にkeyの値を出力、valueの変更、key:valueの追加など。
map2.go
package main
import "fmt"
func main() {
city := map[string]int{"NY": 100, "London": 200, "Tokyo": 300, "Bangkok": 400}
fmt.Println(city) //map[Bangkok:400 London:200 NY:100 Tokyo:300]
//指定したkeyの値を出力
fmt.Println(city["Tokyo"]) //300
//指定したkeyの値を変更
city["Tokyo"] = 500
fmt.Println(city["Tokyo"]) //500
//key:valueを新たに追加
city["Buenos Aires"] = 600
fmt.Println(city) //map[Bangkok:400 Buenos Aires:600 London:200 NY:100 Tokyo:500]
}
空のmapを作成してkey:valueを追加。配列を初期化して値を追加していくとかありがちだからいつか使う、かも。
map3.go
package main
import "fmt"
func main() {
//makeで空のmap作成後、key:valueを追加
city2 := make(map[string]int)
city2["Paris"] = 700
fmt.Println(city2) //map[Paris:700]
}
次に、存在しないkey指定時の動作など。
map4.go
package main
import "fmt"
func main() {
city := map[string]int{"NY": 100, "London": 200, "Tokyo": 300, "Bangkok": 400}
fmt.Println(city)
//valueがないkeyを指定すると:
fmt.Println(city["L.A"])
//指定したkeyのvalueと、存在有無を出力。値が存在する場合:
v, isOk := city["London"]
fmt.Println(v, isOk)
//値が存在しない場合:
v2, isOk2 := city["L.A"]
fmt.Println(v2, isOk2)
}
結果
map[Bangkok:400 London:200 NY:100 Tokyo:300]
0
200 true
0 false
最後に、Python置き換えの例。
dict.py
def main():
# 辞書定義
city = {"NY": 100, "London": 200, "Tokyo": 300, "Bangkok": 400}
print(city) #{'NY': 100, 'London': 200, 'Tokyo': 300, 'Bangkok': 400}
# 指定したkeyの値を出力
print(city[ "London"]) #200
# 指定したkeyの値を変更
city[ "Tokyo"] = 500
print(city[ "Tokyo"]) #500
# key:valueを新たに追加
city["Buenos Aires"] = 600
print(city) #{'NY': 100, 'London': 200, 'Tokyo': 500, 'Bangkok': 400, 'Buenos Aires': 600}
# 存在しないkeyを指定
print(city[ "L.A"]) #KeyError: 'L.A'
if __name__ == "__main__":
main()
参考
【Go入門】mapの基本