在 Go 語言(Golang)中,Map 是一種內(nèi)置的數(shù)據(jù)結(jié)構(gòu),它存儲(chǔ)了一組鍵值對(duì)(Key-Value pairs)。Map 的鍵(Key)必須是支持相等性比較的類型(如整型、字符串、結(jié)構(gòu)體等),而值(Value)則可以是任意類型。Map 提供了快速查找、插入和刪除鍵值對(duì)的能力,是一種非常高效的數(shù)據(jù)結(jié)構(gòu)。
Map 可以通過以下方式聲明:
map[KeyType]ValueType
其中,KeyType
是鍵的類型,ValueType
是值的類型。
例如,聲明一個(gè)存儲(chǔ)字符串鍵和整型值的 Map:
ages := make(map[string]int)
或者,使用字面量直接初始化:
ages := map[string]int{
"Alice": 30,
"Bob": 25,
"Charlie": 35,
}
使用 =
操作符給 Map 賦值時(shí),如果鍵已經(jīng)存在,則更新對(duì)應(yīng)的值;如果鍵不存在,則添加新的鍵值對(duì)。
ages["Dave"] = 40
通過鍵來訪問 Map 中的值。如果鍵不存在,則返回一個(gè)值類型的零值。對(duì)于整型,零值是 0
;對(duì)于字符串,零值是空字符串 ""
;等等。
age := ages["Alice"] // 返回 30
ageOfDave := ages["Dave"] // 返回 40
ageOfEve := ages["Eve"] // 返回 0,因?yàn)?"Eve" 不在 Map 中
在 Go 中,通常使用兩個(gè)步驟來檢查鍵是否存在:首先嘗試訪問鍵對(duì)應(yīng)的值,然后使用額外的邏輯(如與零值比較)來判斷鍵是否真的存在。但從 Go 1.18 開始,可以使用 map
訪問的逗號(hào)操作符來獲取值和一個(gè)布爾值,該布爾值指示鍵是否存在于 Map 中。
if age, ok := ages["Alice"]; ok {
fmt.Println("Age:", age)
} else {
fmt.Println("Key 'Alice' does not exist.")
}
使用內(nèi)置的 delete
函數(shù)來刪除 Map 中的鍵值對(duì)。如果鍵不存在,delete
函數(shù)不會(huì)報(bào)錯(cuò)。
delete(ages, "Bob")
使用 for range
循環(huán)來遍歷 Map。遍歷的順序在 Go 中是不確定的,且每次運(yùn)行都可能不同。
for key, value := range ages {
fmt.Println("Key:", key, "Value:", value)
}
nil
。未初始化的 Map 是 nil
,且不能用于存儲(chǔ)鍵值對(duì)。在使用前,你需要通過 make
函數(shù)或字面量來初始化它。len
函數(shù)來獲取,但該函數(shù)返回的是鍵值對(duì)的數(shù)量,而不是 Map 分配的內(nèi)存大小。sync.Map
或其他同步機(jī)制來保護(hù)對(duì) Map 的訪問。上一篇: Golang 語言范圍(Range)
下一篇: Golang 語言遞歸函數(shù)