Go起步走 - Map

Adler @ 2015-06-01


在Go當中,map相當於JavaScript中的object、Ruby中的hash。

結構

結構上簡單來說就是一個key對上一個value。例如:

my_map["food"]
// 回傳"hamburger"
// 意思是給予一個key,就會像查字典一樣,回傳一個value

用法

因為強型別的關係,所有key和value必須保持統一的型別,宣告時要指定清楚。

var my_map map[string]string
// 第一個string是說明key的型別是string
// 第二個string是說明value的型別是string

my_map = make(map[string]string)
// 一般的宣告方法,必須要另外用make關鍵字才可開始給予數值
my_map["food"] = "hamburger"

還要先make完全就是個麻煩,當然,Go還是提供了一個快速宣告的方法。

my_map := map[string]string {
  "food" : "hamburger",
  "drink": "coke",
}
// 注意最後的逗號(,)必須留著

一般的insert、update、delete、查詢方法

my_map["dessert"] = "cake"
// 不管是新增、更新內容,都可以用等號直接給予數值

delete(my_map, "food")
// 刪除的方法難得很人性化,我一直覺得靜態語言不管什麼都很不人性化

len(my_map)
// 檢查map當中有多少個key

另外map可以直接回傳兩個變數,用以檢查該值是否存在。

var value, exist = my_map["food"]
// value = "hamburger"
// exist = true
// 第一個回傳值會回傳該key的value,第二個回傳值僅會回傳該值是否存在

var _, exist = my_app["food"]
//僅檢查該value是否存在而不使用該value

使用loop時,會直接將每一個key都跑過一遍,跟Ruby的each相當。

for key, value := range my_map {
  fmt.Println("Key: " + key)
  fmt.Println("Value: " + value)
}
// 在loop當中可直接使用key、value作為變數