go語言學習 對映map

2022-08-09 06:00:16 字數 4074 閱讀 1727

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唯一可以合法比較的物件是nilmap 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...