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 的型別必須是可比較的(能用相等運算子)——所以 slice、map、func 不能當 key,見 Go 的 slice、map、func 不能用相等運算子比較。
常用操作
delete(x, "Test") // 刪除一組 key-value(key 不存在也不會出錯)
len(x) // 有多少組相關:make 只用於 map、slice、channel、Go 的 map 讀取不存在的 key 會回傳 zero value