溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么使用Go語言的map

發(fā)布時(shí)間:2021-11-17 14:22:26 來源:億速云 閱讀:102 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要講解了“怎么使用Go語言的map”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“怎么使用Go語言的map”吧!

    語法

    聲明和初始化

    配合make使用,否則是nil

    var map[KeyType]ValueType
    //KeyType:表示鍵的類型
    //ValueType:表示鍵對(duì)應(yīng)的值的類型
    make(map[KeyType]ValueType, [cap])
    //cap表示map的容量,該參數(shù)雖然不是必須的,但是我們應(yīng)該在初始化map的時(shí)候就為其指定一個(gè)合適的容量
    //當(dāng)你的容量超過時(shí)會(huì)自動(dòng)擴(kuò)充

    例子:

    //1.聲明
    var name1 map[int]string   //key是int,value是string
    var name2 map[string]string  //key是string,value是string
    //字面量
    names3:=map[int]string{0:"張三",1:"李四"}
    //2.分配內(nèi)存
    name1 = make(map[int]string, 2)         //2:map的容量,當(dāng)你的容量超過時(shí)會(huì)自動(dòng)擴(kuò)充
    name2 = make(map[string]string, 2)
    //3.賦值
    //3.1 通過KeyType賦值
    name1[0]="張三"   //key:0   value:張三
    name1[1]="李四"   //key:1   value:李四
    name1[2]="王五"   //key:2   value:王五    //已經(jīng)超過了分配的的容量,會(huì)自動(dòng)擴(kuò)充
    name2["A"]="張三"
    name2["B"]="李四"

    讀取

    根據(jù)KeyType來讀取

    如果keyType存在,就返回那個(gè)值,如果不存在,返回類型默認(rèn)值值

    fmt.Println(name1[0])
    fmt.Println(name2["B"])

    測(cè)試map中key值是否存在

    通過KeyType來取值時(shí),會(huì)返回兩個(gè)值,一個(gè)是vlue,另一個(gè)是是否存在的bool

    if value, ok := name1[5]; ok {
    	fmt.Println("存在這個(gè)值",value)
    } else {
    	fmt.Println("不存在這個(gè)值", value)
    }

    刪除

    delete(map[int]string,[KeyType])

    例子

    delete(name1 , 1)

    遍歷

    range

    例子:

    for key,value:=range name1 {
    	fmt.Printf("key=%d,value=%s\n",key,value)
    }
    for key,value:=range name2 {
    	fmt.Printf("key=%s,value=%s\n",key,value)
    }

    總結(jié)

    1. map必須借助make分配內(nèi)存空間,否則是nil

    2. 字面量初始化必修保證key是唯一的,否則error

    3. map傳遞的是引用,就是說形參會(huì)改變實(shí)參的值

    4. 直接對(duì)map對(duì)象使用[]操作符獲得的對(duì)象不能直接修改狀態(tài)

    5. map中存儲(chǔ)指針而不是結(jié)構(gòu)體

    示例

    package main
    import "fmt"
    func main() {
    	//一、聲明和初始化【配合make使用,否則是nil】
    	//1.聲明
    	var name1 map[int]string    //key是int,value是string
    	var name2 map[string]string //key是string,value是string
    	//2.分配內(nèi)存
    	name1 = make(map[int]string, 2) //2:map的容量,當(dāng)你的容量超過時(shí)會(huì)自動(dòng)擴(kuò)充
    	name2 = make(map[string]string, 2)
    	//3.賦值
    	//3.1 通過KeyType賦值
    	name1[0] = "張三" //key:0   value:張三
    	name1[1] = "李四" //key:1   value:李四
    	name1[2] = "王五" //key:2   value:王五    //已經(jīng)超過了分配的的容量,會(huì)自動(dòng)擴(kuò)充
    	name2["A"] = "張三"
    	name2["B"] = "李四"
    	//二、讀取
    	//	1. 根據(jù)KeyType來讀取,如果keyType存在,就返回那個(gè)值,如果不存在,返回類型默認(rèn)值值
    	fmt.Println(name1[0])
    	fmt.Println(name2["B"])
    	//	2. 測(cè)試map中key值是否存在【通過KeyType來取值時(shí),會(huì)返回兩個(gè)值,一個(gè)是vlue,另一個(gè)是是否存在的bool】
    	if value, ok := name1[2]; ok {
    		fmt.Println("存在這個(gè)值", value)
    	} else {
    		fmt.Println("不存在這個(gè)值", value)
    	}
    	//三、刪除
    	delete(name1, 1)  //刪除了李四
    	delete(name2, "C")   //沒有這個(gè)C
    	fmt.Println(name1)
    	fmt.Println(name2)
    	//四、遍歷
    	for key,value:=range name1 {
    		fmt.Printf("key=%d,value=%s\n",key,value)
    	}
    	for key,value:=range name2 {
    		fmt.Printf("key=%s,value=%s\n",key,value)
    	}
    }

    感謝各位的閱讀,以上就是“怎么使用Go語言的map”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)怎么使用Go語言的map這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI