Go語言基礎(chǔ)map用法及示例詳解

概述
- map是基于key-value鍵值對的無序的集合
- Go語言中的map是引用類型
- 必須初始化才能使用。
語法
聲明和初始化
配合make使用,否則是nil
var map[KeyType]ValueType //KeyType:表示鍵的類型 //ValueType:表示鍵對應(yīng)的值的類型 make(map[KeyType]ValueType, [cap]) //cap表示map的容量,該參數(shù)雖然不是必須的,但是我們應(yīng)該在初始化map的時候就為其指定一個合適的容量 //當(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)你的容量超過時會自動擴(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)超過了分配的的容量,會自動擴(kuò)充
name2["A"]="張三"
name2["B"]="李四"
讀取
根據(jù)KeyType來讀取
如果keyType存在,就返回那個值,如果不存在,返回類型默認(rèn)值值
fmt.Println(name1[0]) fmt.Println(name2["B"])
測試map中key值是否存在
通過KeyType來取值時,會返回兩個值,一個是vlue,另一個是是否存在的bool
if value, ok := name1[5]; ok {
fmt.Println("存在這個值",value)
} else {
fmt.Println("不存在這個值", 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傳遞的是引用,就是說形參會改變實參的值
- 直接對map對象使用[]操作符獲得的對象不能直接修改狀態(tài)
- map中存儲指針而不是結(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)你的容量超過時會自動擴(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)超過了分配的的容量,會自動擴(kuò)充
name2["A"] = "張三"
name2["B"] = "李四"
//二、讀取
// 1. 根據(jù)KeyType來讀取,如果keyType存在,就返回那個值,如果不存在,返回類型默認(rèn)值值
fmt.Println(name1[0])
fmt.Println(name2["B"])
// 2. 測試map中key值是否存在【通過KeyType來取值時,會返回兩個值,一個是vlue,另一個是是否存在的bool】
if value, ok := name1[2]; ok {
fmt.Println("存在這個值", value)
} else {
fmt.Println("不存在這個值", value)
}
//三、刪除
delete(name1, 1) //刪除了李四
delete(name2, "C") //沒有這個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ǔ)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
以Golang為例詳解AST抽象語法樹的原理與實現(xiàn)
AST?使用樹狀結(jié)構(gòu)來表達(dá)編程語言的結(jié)構(gòu),樹中的每一個節(jié)點都表示源碼中的一個結(jié)構(gòu),本文將以GO語言為例,為大家介紹一下AST抽象語法樹的原理與實現(xiàn),希望對大家有所幫助2024-01-01
go如何優(yōu)雅關(guān)閉Graceful?Shutdown服務(wù)
這篇文章主要為大家介紹了go優(yōu)雅關(guān)閉Graceful?Shutdown服務(wù)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05
golang中按照結(jié)構(gòu)體的某個字段排序?qū)嵗a
在任何編程語言中,關(guān)乎到數(shù)據(jù)的排序都會有對應(yīng)的策略,下面這篇文章主要給大家介紹了關(guān)于golang中按照結(jié)構(gòu)體的某個字段排序的相關(guān)資料,需要的朋友可以參考下2022-05-05
Go結(jié)構(gòu)體從基礎(chǔ)到應(yīng)用深度探索
本文深入探討了結(jié)構(gòu)體的定義、類型、字面量表示和使用方法,旨在為讀者呈現(xiàn)Go結(jié)構(gòu)體的全面視角,通過結(jié)構(gòu)體,開發(fā)者可以實現(xiàn)更加模塊化、高效的代碼設(shè)計,這篇文章旨在為您提供關(guān)于結(jié)構(gòu)體的深入理解,助您更好地利用Go語言的強大功能2023-10-10
構(gòu)建Golang應(yīng)用最小Docker鏡像的實現(xiàn)
這篇文章主要介紹了構(gòu)建Golang應(yīng)用最小Docker鏡像的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05
go實現(xiàn)服務(wù)優(yōu)雅關(guān)閉的示例
本文主要介紹了go實現(xiàn)服務(wù)優(yōu)雅關(guān)閉的示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02

