go開發手冊: https://studygolang.com/pkgdocgolang
有資料翻譯成地圖、映射或字典。可是大多數習慣上翻譯成集合。
一、map是Go中的內置類型,它將一個值與一個鍵關聯起來。可使用相應的鍵檢索值。數組
二、使用map的注意細節:
• map是無序的,每次打印出來的map都會不同,它不能經過index獲取,而必須經過key獲取;
• map的長度是不固定的,和slice-樣能夠擴展。內置的len()函數一樣適用於map,返回map擁有的鍵值對的數量。可是map不能經過cap()函數計算容量(或者說cap()函數的參數不能夠是map);
•同_tmap中key必須保證惟_。key的數據類型必須是可參與比較運算的類型,也就是支持==或!=操做的類型。如布爾型、整數型、浮點型、字符串型、數組。對於切片、函數等引用類型則不能做爲鍵的類型;函數
(Invalid map key type: must not be must not be a function , map or slice)
• map的value能夠是任何數據類型。
•和slice—樣,map也是一種引用類型;spa
一、map的聲明翻譯
map中key能夠是:int、float、bool、string、數組; 必定不能夠是:切片、函數、mapcode
package main import ( "fmt" ) func main() { //map的聲明 一(var 變量名 map[key的類型]value的類型 ) var map1 map[string]string fmt.Printf("%T,%v,%v \n", map1, map1, map1 == nil) //map[string]string,map[],true //map聲明 二 map2 := make(map[string]string) fmt.Printf("%T,%v,%v \n", map2, map2, map2 == nil) //map[string]string,map[],false }
二、map的初始化blog
package main import ( "fmt" ) func main() { //map的聲明 一(var 變量名 map[key的類型]value的類型 ) var map1 map[string]string fmt.Println("map的長度", len(map1)) //在聲明的同時初始化數據 var map2 = map[string]string{ "sz": "張三", "ls": "李四", } fmt.Println("map=", map2) //先聲明 而後再賦值 map3 := make(map[string]string) map3["ww"] = "王五" map3["lb"] = "劉備" fmt.Println("map=", map3) }
三、map的CURD索引
package main import ( "fmt" ) func main() { //=========在聲明的同時初始化數據 var map2 = map[string]string{ "zs": "張三", "ls": "李四", } //=========map添加數據 map2["lb"] = "劉備" //=========map的遍歷 for k, v := range map2 { fmt.Println("k=", k, " v=", v) } //=========根據key檢測值是否存在 v, ok := map2["sz"] fmt.Println("v=", v, " ok=", ok) //v= 張三 ok= true v1, ok1 := map2["sssss"] fmt.Println("v=", v1, " ok=", ok1) //v= ok= false if value, key := map2["lb"]; key { fmt.Println("元素的值=", value) } //=========修改map中key對應的value map2["zs"] = "zhangshan" fmt.Println("update=", map2) //=========delete 刪除map中的元素 //該函數沒有返回值,若是刪除不存在的key程序不會報錯 fmt.Println("delete befor=", map2) delete(map2, "lb") delete(map2, "HHHHHHHHHHHHHH") fmt.Println("delete after=", map2) //=========清空map (go語言沒有清空的函數,若是要清空,就是直接賦新的map) map2 = map[string]string{} //map2 = make(map[string]string) fmt.Println("clear=", map2) //map是引用類型 }
四、map是引用類型開發
package main import ( "fmt" "container/list" ) func main() { //初始薪資 salary := map[string]float64 { "Steven":15000, "Josh":20000, "Daniel":5000, } fmt.Println("初始薪資",salary) //調薪後 newSalary := salary newSalary["Daniel"] = 8000 fmt.Println("調薪後:" , newSalary) fmt.Println("原始薪資salary是否受影響:" , salary) //按期漲薪 changeSalary(salary) fmt.Println("原始薪資salary是否受影響:" , salary) } //按期漲薪 func changeSalary(m map[string]float64) { for k :=range m { m[k] *= 1.1 } }