map建立建立
1) make(map[keytype]valuetype, initialcapacity)
2) make(map[keytype]valuetype)
3) map[keytype]valuetype{}
4) map[keytype]valuetype
用4種方式分別建立陣列,其中第一種和第二種的區別在於,有沒有指定初始容量,不過使用的時候則無需在意這些,因為map的本質決定了,一旦容量不夠,它會自動擴容。
func test1()
map4 := map[string]string
fmt.println(map1, map2, map3, map4)
}
輸出 :
map
mapmap
map[c:3 a:1 b:2]
注意,必須要先初始化才能給map賦值設定元素,不然會引起 panic: assign to entry in nil map。
**測試:
package main
import(
"fmt"
)func main()
ages02 := make(map[string]int)
ages02["chris"] =20
ages02["paul"] =30
//age01和age02兩種初始化的方式等價
m1 := make(map[string]int)
m2 := map[string]int{}
//m1和m2建立方式等價,都是建立了乙個空的的map,這個時候m1和m2沒有任何元素
for name,age := range ages01
for name,age := range ages02
var null_map map[string]int
//宣告但未初始化map,此時是map的零值狀態(只有乙個nil元素)
empty_map := map[string]int{} //建立了初始化了乙個空的的map,這個時候empty_map沒有任何元素
fmt.println(m1 != nil && m2 != nil) //true
fmt.println(len(null_map)==0)
fmt.println(null_map ==nil) //true,此時是map的零值狀態(nil)
fmt.println(len(empty_map)==0)
fmt.println(empty_map ==nil) //false,空的的map不等價於nil(map的零值狀態)
empty_map["test"] =12
//執行正常,空的的map可以賦值設定元素
null_map["test"] =12
//panic: assignment to entry in nil map,無法給未初始化的map賦值設定元素
}
輸出:
alice 31
bob 13
chris 20
paul 30
true
true
true
true
false
panic: assignment to entry in
nil map
元素的增刪改查
首先增和改沒什麼區別,只需要map[k]=v即可。
刪除的話使用內建函式delete 來從字典中根據鍵來刪除乙個元素。
查詢乙個元素用下面的**段:
if _, ok := map[key]; ok
關於這裡的根據鍵值索引map元素,這裡多說兩句。
golang中的函式可以多值返回,比如下面函式,既能返回兩數之差,又能返回兩數之積。
package main
import(
"fmt"
)func multi_return(a,b int)(int,int)
func main()
類似的,在你根據鍵值索引某個元素時,也會返回兩個值:索引到的值和本次索引是否成功(這裡可能會因為索數值越界或者索引鍵值有誤而導致索引失敗)。
**如下:
package main
import(
"fmt"
)func main()
age,ok := ages01["bo"] //age才是根據鍵值索引到的值
if !ok else
}
map不能比較
golang中map和slice,func一樣,不支援 == 操作符,就是不能直接比較。唯一合法的就是和nil作比較,判斷該map是不是零值狀態。
當然,可以自定義實現乙個map之間的比較:
package main
import(
"fmt"
)func equal(m1,m2 map[string]int) bool
for k,xv :=range m1
}return
true
}func main()
fmt.println(equal(map01,map02))
}
golang 中 map 的使用
golang 中 map 的初始化方式 1 先宣告 map var m1 map int int 再使用make函式建立乙個非nil的map,nil map不能賦值 m1 make map int int 賦值 m1 66 55fmt.println m1 map 66 55 2 直接 make 建...
Golang 中使用多維 map
golang 的 xml json 解析庫乍看使用起來很方便,只要構造一樣結構的 struct 就可以一下子匯入到變數中去了.其實手工構造 struct 非常容易出現結構偏差,而且最要命的是 unmarshal 執行的時候不是嚴格匯入所以沒有任何報錯.於是這兩天寫了乙個給 golang 用的 xml...
Golang 中使用多維 map
golang 的 xml json 解析庫乍看使用起來很方便,只要構造一樣結構的 struct 就可以一下子匯入到變數中去了.其實手工構造 struct 非常容易出現結構偏差,而且最要命的是 unmarshal 執行的時候不是嚴格匯入所以沒有任何報錯.於是這兩天寫了乙個給 golang 用的 xml...