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)是一種無序的鍵值對集合,使用關(guān)鍵字map來聲明,并使用鍵和值類型作為參數(shù)。它是一個用于存儲一系列無序的鍵值對的集合,基于鍵來存儲值,鍵就像索引一樣,指向與該鍵關(guān)聯(lián)的值。
映射被創(chuàng)建和初始化后,可以通過指定適當(dāng)類型的鍵并給這個鍵賦一個值來為映射賦值,每個鍵必須是唯一的。另外,映射是可變的,可以在已有的鍵值對基礎(chǔ)上添加新的鍵值對。Go語言中映射的實現(xiàn)使用哈希表,因此它的操作是非常快速的。然而,由于映射是無序的,即使使用同樣的順序保存鍵值對,每次迭代映射的時候,順序也有可能不一樣。
聲明映射
在Go語言中,映射的聲明使用map關(guān)鍵字,并指定鍵和值的類型。以下是聲明映射的語法:
var m map[keyType]valueType
其中,keyType表示鍵的類型,valueType表示值的類型。比如:要聲明一個將字符串作為鍵、整數(shù)作為值的映射,可以參考下面的示例代碼。
var m map[string]int
初始化映射
聲明映射時,可以直接添加初始鍵值對,可參考下面的示例代碼。
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)建了一個空的映射,可以在后續(xù)的代碼中通過使用賦值操作來添加鍵值對。
package main import "fmt" func main() { mapWebsite := make(map[string]int) // 輸出:map[] fmt.Println(mapWebsite) }
注意:映射是引用類型,使用make函數(shù)分配的是一個引用,后續(xù)對映射的修改會影響到原始的映射對象。
操作映射
聲明映射后,我們可以向映射中添加新的鍵值對,也可以訪問和修改映射中的值。具體用法可參考下面的示例代碼。
package main import "fmt" func main() { mapWebsite := make(map[string]int) // 添加新的鍵值對 mapWebsite["CSDN"] = 66 mapWebsite["GitHub"] = 88 // 輸出:map[CSDN:66 GitHub:88] fmt.Println(mapWebsite) // 訪問鍵對應(yīng)的值,輸出:88 fmt.Println(mapWebsite["GitHub"]) mapWebsite["CSDN"] = 99 // 修改鍵對應(yīng)的值,輸出:99 fmt.Println(mapWebsite["CSDN"]) }
另外,我們可以使用len()函數(shù)獲取映射的長度,使用delete()函數(shù)刪除某個鍵值對。
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將是對應(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時,range會返回兩個值:鍵和對應(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Golang RSA生成密鑰、加密、解密、簽名與驗簽的實現(xiàn)
RSA 是最常用的非對稱加密算法,本文主要介紹了Golang RSA生成密鑰、加密、解密、簽名與驗簽的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下2023-11-11Golang性能提升利器之SectionReader的用法詳解
本文將介紹 Go 語言中的 SectionReader,包括 SectionReader的基本使用方法、實現(xiàn)原理、使用注意事項,感興趣的小伙伴可以了解一下2023-07-07Go Resiliency庫中timeout實現(xiàn)原理及源碼解析
Go-Resiliency庫中的timeout是一種基于協(xié)程的超時機制,通過創(chuàng)建協(xié)程來執(zhí)行任務(wù)并設(shè)置超時時間,若任務(wù)執(zhí)行時間超時則中止協(xié)程并返回錯誤,需要詳細了解可以參考下文2023-05-05