Go語言基礎(chǔ)map用法及示例詳解
概述
- map是基于key-value鍵值對(duì)的無序的集合
- 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é)
- map必須借助make分配內(nèi)存空間,否則是nil
- 字面量初始化必修保證key是唯一的,否則error
- map傳遞的是引用,就是說形參會(huì)改變實(shí)參的值
- 直接對(duì)map對(duì)象使用[]操作符獲得的對(duì)象不能直接修改狀態(tài)
- 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語言基礎(chǔ)map用法及示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Go語言基礎(chǔ)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Go語言kafka生產(chǎn)消費(fèi)消息實(shí)例搬磚
這篇文章主要為大家介紹了Go語言kafka生產(chǎn)消費(fèi)消息的實(shí)例搬磚,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06Golang定時(shí)器Timer與Ticker的使用詳解
在 Go 里有很多種定時(shí)器的使用方法,像常規(guī)的 Timer、Ticker 對(duì)象,本文主要為大家介紹了Timer與Ticker的使用,感興趣的小伙伴可以了解一下2023-05-05go內(nèi)存緩存如何new一個(gè)bigcache對(duì)象示例詳解
這篇文章主要為大家介紹了go內(nèi)存緩存如何new一個(gè)bigcache對(duì)象示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09go通過編碼縮短字符串的長(zhǎng)度實(shí)現(xiàn)方法步驟
這篇文章主要為大家介紹了go通過編碼縮短字符串的長(zhǎng)度實(shí)現(xiàn)方法步驟,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01