go語言中的map(對映、字典)是一種內建的資料結構,它是乙個無序的key
-value
對的集合。
go語言中的map是引用型別,必須初始化才能使用。
一、map的定義和初始化
go語言中map宣告的語法:
var m = map[keytype]valuetype其中:keytype-鍵key的型別
valuetype-值value的型別
package main
import "fmt"
func main()
執行結果
map
true
panic: assignment to entry in nil map
goroutine 1 [running]:
main.main()
e:/golang/go_project/main.go:9 +0x107
exit status 2
但這樣宣告的map的初始值為nil,是不能存放鍵值對,需要使用make()
函式類分配記憶體。
m = make(map[keytype]valuetype, [cap])其中:cap-表示map的容量,非必須,但建議初始化時指定乙個合適的容量。
package main
import "fmt"
func main()
執行結果
map
false
map[1:tom]
也可以直接宣告和賦值
var m = map[keytype]valuetype
package main
import "fmt"
func main()
fmt.println(m)
}
執行結果
map[1:tom 2:jack]
二、map的操作
1、新增
map[key] = value注意:
package main
import "fmt"
func main()
執行結果
map[1:tom 2:jack]
map[1:lili 2:jack]
2、取值map[key] 可以獲得key對應的value值但是當key如果不存在的時候,我們會得到該value值型別的預設值,比如string型別得到空字串,int型別得到0。但是程式不會報錯。
所以我們可以使用ok-idiom獲取值,可知道key/value是否存在
value, ok := map[key]
package main
import "fmt"
func main()
fmt.println(m[3]) // 返回string的預設值""
v, ok := m[3]
if ok else
}
執行結果
查無此人!
3、刪除
使用delete()
內建函式從map中刪除一組鍵值對,如果key存在則刪除,如果key不存在則不做任何操作也不報錯
delete(map, key)其中:map-表示要刪除鍵值對的map
key-表示要刪除的鍵值對的鍵
package main
import "fmt"
func main()
delete(m, 2)
delete(m, 3)
fmt.println(m)
}
執行結果
map[1:tom]
4、遍歷
go語言中使用for range遍歷map,遍歷的結果是無序的。
package main
import "fmt"
func main()
for k, v := range m
}
執行結果
3-lili 4-marry 1-tom 2-jack
5、map的長度len(map)可以獲取map的長度兩個map也是不能進行比較的,map唯一可以合法比較的物件是nil
map can only be compared to nil
, 應該用len(map) == 0
來判斷map是否為空
三、map的注意事項
1、map是引用型別
go語言中和切片一樣,map也是引用資料型別,賦值和傳參都是淺拷貝,傳遞的是map的位址。它們都指向相同的內部資料結構,因此,乙個的變化會反映到另乙個。
package main
import "fmt"
func main()
m2 := m
m2[2] = "小小強"
fmt.println(m) //map[1:tom 2:小小強 3:lili 4:marry]
fmt.println(m2) //map[1:tom 2:小小強 3:lili 4:marry]
test(m)
fmt.println(m) //map[1:小強 2:小小強 3:lili 4:marry]
}func test(m map[int]string)
執行結果
map[1:tom 2:小小強 3:lili 4:marry]
map[1:tom 2:小小強 3:lili 4:marry]
map[1:小強 2:小小強 3:lili 4:marry]
2、map&slice
map和slice結合使用,可以是
package main
import "fmt"
func main()
m2 := make(map[string]string, 4)
m2 = map[string]string
m3 := make(map[string]string, 6)
m3 = map[string]string
s := make(map[string]string, 3, 10)
s = map[string]string
fmt.println(s)
for k1, v1 := range s
}}
執行結果
[map[address:上海市 name:tom] map[address:北京市 name:jack] map[address:蘇州市 name:marry]]
第1個人資訊:
name:tom
address:上海市
第2個人資訊:
name:jack
address:北京市
第3個人資訊:
address:蘇州市
name:marry
package main
import "fmt"
func main() ,
"jack": int,
} fmt.println(m)
}
執行結果
map[jack:[94 87 91] tom:[80 98 95]]
Go語言學習筆記 map
學習筆記根據 無聞 go語言基礎教程 整理 package main import fmt sort func main 普通建立方式 func test1 fmt.println m map 使用make關鍵字建立 func test2 直接宣告和賦值建立 func test3 使用更簡單的方式 ...
go語言學習筆記 map
理解 map是由一組無序的鍵key值value對集合的內建型別,可以通過鍵來獲取對應的值,map和slices一樣,也是引用型別 注意 map之間不能使用 操作符來判斷 建立map 語法 map type of key type of value var mymap map string int n...
go語言學習筆記 map
go語言內建有map這種資料結構,它由無序的鍵值對組成,跟大部分語言中的map用法非常相似。它的鍵不能由可變型別 引用語義 的結構型別擔當,如切片 陣列 函式等等。map只有len,沒有cap。我們可以直接定義,或者通過make函式建立,通過make函式建立時,可以指定容量。package main...