Go映射的使用
概述
在上一節(jié)的內(nèi)容中,我們介紹了Go的結(jié)構(gòu)體,包括:定義結(jié)構(gòu)體、聲明結(jié)構(gòu)體變量、使用結(jié)構(gòu)體、結(jié)構(gòu)體關(guān)聯(lián)函數(shù)、new、組合等。在本節(jié)中,我們將介紹Go的映射。Go語言中的映射(Map)是一種無序的鍵值對(duì)集合,使用關(guān)鍵字map來聲明,并使用鍵和值類型作為參數(shù)。它是一個(gè)用于存儲(chǔ)一系列無序的鍵值對(duì)的集合,基于鍵來存儲(chǔ)值,鍵就像索引一樣,指向與該鍵關(guān)聯(lián)的值。
映射被創(chuàng)建和初始化后,可以通過指定適當(dāng)類型的鍵并給這個(gè)鍵賦一個(gè)值來為映射賦值,每個(gè)鍵必須是唯一的。另外,映射是可變的,可以在已有的鍵值對(duì)基礎(chǔ)上添加新的鍵值對(duì)。Go語言中映射的實(shí)現(xiàn)使用哈希表,因此它的操作是非??焖俚摹H欢?,由于映射是無序的,即使使用同樣的順序保存鍵值對(duì),每次迭代映射的時(shí)候,順序也有可能不一樣。
聲明映射
在Go語言中,映射的聲明使用map關(guān)鍵字,并指定鍵和值的類型。以下是聲明映射的語法:
var m map[keyType]valueType
其中,keyType表示鍵的類型,valueType表示值的類型。比如:要聲明一個(gè)將字符串作為鍵、整數(shù)作為值的映射,可以參考下面的示例代碼。
var m map[string]int
初始化映射
聲明映射時(shí),可以直接添加初始鍵值對(duì),可參考下面的示例代碼。
package main import "fmt" func main() { mapWebsite := map[string]int{ "CSDN": 66, "GitHub": 88, } // 輸出:map[CSDN:66 GitHub:88] fmt.Println(mapWebsite) }
當(dāng)然,也可以使用make函數(shù)來初始化映射。在下面的示例代碼中,我們通過make函數(shù)創(chuàng)建了一個(gè)空的映射,可以在后續(xù)的代碼中通過使用賦值操作來添加鍵值對(duì)。
package main import "fmt" func main() { mapWebsite := make(map[string]int) // 輸出:map[] fmt.Println(mapWebsite) }
注意:映射是引用類型,使用make函數(shù)分配的是一個(gè)引用,后續(xù)對(duì)映射的修改會(huì)影響到原始的映射對(duì)象。
操作映射
聲明映射后,我們可以向映射中添加新的鍵值對(duì),也可以訪問和修改映射中的值。具體用法可參考下面的示例代碼。
package main import "fmt" func main() { mapWebsite := make(map[string]int) // 添加新的鍵值對(duì) mapWebsite["CSDN"] = 66 mapWebsite["GitHub"] = 88 // 輸出:map[CSDN:66 GitHub:88] fmt.Println(mapWebsite) // 訪問鍵對(duì)應(yīng)的值,輸出:88 fmt.Println(mapWebsite["GitHub"]) mapWebsite["CSDN"] = 99 // 修改鍵對(duì)應(yīng)的值,輸出:99 fmt.Println(mapWebsite["CSDN"]) }
另外,我們可以使用len()函數(shù)獲取映射的長(zhǎng)度,使用delete()函數(shù)刪除某個(gè)鍵值對(duì)。
package main import "fmt" func main() { mapWebsite := map[string]int{ "CSDN": 66, "GitHub": 88, } // 輸出:2 fmt.Println(len(mapWebsite)) delete(mapWebsite, "GitHub") // 輸出:1 fmt.Println(len(mapWebsite)) }
可以使用如下方式檢查鍵是否存在于映射中:value, ok := mapName[key]。其中,mapName是映射的變量名,key是要檢查的鍵。如果key存在于mapName中,那么value將是對(duì)應(yīng)的值,并且ok將置為true;否則,value將是零值,并且ok將置為false。
package main import "fmt" func main() { mapWebsite := map[string]int{ "CSDN": 66, "GitHub": 88, } value, ok := mapWebsite["CSDN"] if ok { // 輸出:existed: 66 fmt.Printf("existed: %d\n", value) } else { fmt.Println("not exist") } }
要遍歷map,我們可以使用range關(guān)鍵字。當(dāng)遍歷map時(shí),range會(huì)返回兩個(gè)值:鍵和對(duì)應(yīng)的值。具體用法可參考下面的示例代碼。
package main import "fmt" func main() { mapFruit := make(map[string]int) mapFruit["Apple"] = 66 mapFruit["Banana"] = 88 mapFruit["Orange"] = 99 /* 遍歷map,輸出: Apple 66 Banana 88 Orange 99 */ for key, value := range mapFruit { fmt.Println(key, value) } }
到此這篇關(guān)于Go映射的使用的文章就介紹到這了,更多相關(guān)Go映射內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Golang RSA生成密鑰、加密、解密、簽名與驗(yàn)簽的實(shí)現(xiàn)
RSA 是最常用的非對(duì)稱加密算法,本文主要介紹了Golang RSA生成密鑰、加密、解密、簽名與驗(yàn)簽的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-11-11Go實(shí)現(xiàn)mongodb增刪改查工具類的代碼示例
這篇文章主要給大家介紹了關(guān)于Go實(shí)現(xiàn)mongodb增刪改查工具類的相關(guān)資料,MongoDB是一個(gè)NoSQL數(shù)據(jù)庫(kù),它提供了靈活的文檔存儲(chǔ)模型以及強(qiáng)大的查詢和操作功能,需要的朋友可以參考下2023-10-10Golang性能提升利器之SectionReader的用法詳解
本文將介紹 Go 語言中的 SectionReader,包括 SectionReader的基本使用方法、實(shí)現(xiàn)原理、使用注意事項(xiàng),感興趣的小伙伴可以了解一下2023-07-07Go Resiliency庫(kù)中timeout實(shí)現(xiàn)原理及源碼解析
Go-Resiliency庫(kù)中的timeout是一種基于協(xié)程的超時(shí)機(jī)制,通過創(chuàng)建協(xié)程來執(zhí)行任務(wù)并設(shè)置超時(shí)時(shí)間,若任務(wù)執(zhí)行時(shí)間超時(shí)則中止協(xié)程并返回錯(cuò)誤,需要詳細(xì)了解可以參考下文2023-05-05