Go 建立 map 的三種寫法

Map 就是其他語言的 object / dict —— key-value 對。三種寫法只有第一種是不能寫入的。

var x map[string]int          // 一、nil map,只能讀不能寫
y := make(map[string]int)     // 二、make 配置一塊空的 map
z := map[string]int{}         // 三、空字面量,等同 make
寫法能寫入嗎什麼時候用
var x map[string]int❌ panic,見 nil map 可以讀但不能寫只想宣告型別(例如當函式參數或 struct 欄位,之後才賦值)
make(map[string]int)一般情況;可加第二參數 make(m, 100) 預留容量
map[string]int{}想用 var 的形式,或要同時給初始內容

第三種也可以直接帶內容:

var x = map[string]int{"Test": 10}

型別寫成 map[K]V,key 不限於 string:

var x = map[int]int{}

key 的型別必須是可比較的(能用相等運算子)——所以 slicemapfunc 不能當 key,見 Go 的 slice、map、func 不能用相等運算子比較

常用操作

delete(x, "Test")   // 刪除一組 key-value(key 不存在也不會出錯)
len(x)              // 有多少組

相關:make 只用於 map、slice、channelGo 的 map 讀取不存在的 key 會回傳 zero value