GO中的地圖是一種內置的關聯數據類型,可讓您存儲鍵值對。它們被實現為哈希表,可有效訪問存儲在它們中的值。地圖是無序的,這意味著在程序執行過程中,密鑰和值的順序可能會發生變化。
要在GO中創建地圖,您可以將make
函數與map
關鍵字一起使用。宣布地圖的語法如下:
<code class="go">myMap := make(map[keyType]valueType)</code>
在這裡, keyType
是鍵的類型,而valueType
是值的類型。例如,為整數創建字符地圖:
<code class="go">ages := make(map[string]int)</code>
您還可以在聲明時使用複合文字來初始化具有值的映射:
<code class="go">ages := map[string]int{ "Alice": 30, "Bob": 25, }</code>
要將鍵值對添加到地圖中,您可以使用以下語法:
<code class="go">ages["Charlie"] = 35</code>
要從地圖檢索值,您可以使用密鑰:
<code class="go">age := ages["Alice"]</code>
如果您嘗試檢索地圖中不存在的鍵的值,則將獲得值類型的零值。要在訪問其值之前檢查鍵是否存在,您可以使用多價分配:
<code class="go">age, exists := ages["David"] if !exists { fmt.Println("David is not in the map") }</code>
要從地圖中刪除鍵值對,您可以使用delete
函數:
<code class="go">delete(ages, "Bob")</code>
在GO編程中使用地圖提供了一些關鍵好處:
len
獲取條目數量,並delete
以刪除條目。為了在GO中有效迭代地圖,您可以在for
循環中使用range
關鍵字。 range
關鍵字允許您訪問地圖中每個條目的密鑰和值。這是一個示例:
<code class="go">ages := map[string]int{ "Alice": 30, "Bob": 25, "Charlie": 35, } for key, value := range ages { fmt.Printf("Name: %s, Age: %d\n", key, value) }</code>
這將迭代地圖中的所有鍵值對,打印出每個名稱和年齡。請注意,由於地圖本質上是無序的,因此不能保證訪問鍵值對的順序。
如果您只需要在鍵上迭代,則可以使用以下語法:
<code class="go">for key := range ages { fmt.Printf("Name: %s\n", key) }</code>
如果您只需要迭代值,則可以使用空白標識符_
進行密鑰:
<code class="go">for _, value := range ages { fmt.Printf("Age: %d\n", value) }</code>
在GO中使用地圖時,應該避免幾個常見的錯誤:
不檢查關鍵存在:從地圖檢索值時,很容易忘記檢查鍵是否存在。不這樣做會導致代碼中使用意外的零值。
<code class="go">// Incorrect age := ages["David"] // If "David" doesn't exist, age will be 0 // Correct age, exists := ages["David"] if !exists { fmt.Println("David is not in the map") }</code>
並發寫作:在沒有適當同步的情況下從多個goroutines寫入地圖會導致種族條件和不確定的行為。
<code class="go">// Incorrect go func() { ages["Eve"] = 40 }() go func() { ages["Frank"] = 45 }() // Correct var mutex sync.Mutex go func() { mutex.Lock() ages["Eve"] = 40 mutex.Unlock() }() go func() { mutex.Lock() ages["Frank"] = 45 mutex.Unlock() }()</code>
使用不可拍照的類型作為密鑰:地圖需要鍵可比,因此使用諸如切片或地圖(如密鑰)(例如鍵)將導致編譯誤差。
<code class="go">// Incorrect invalidMap := make(map[[]int]int) // Will not compile // Correct validMap := make(map[string]int)</code>
忽略地圖初始化:嘗試在不正確初始化的情況下使用地圖將導致運行時恐慌。
<code class="go">// Incorrect var ages map[string]int ages["Alice"] = 30 // This will panic // Correct ages := make(map[string]int) ages["Alice"] = 30</code>
通過避免這些常見的錯誤,您可以在GO程序中有效,安全地使用地圖。
以上是GO中有什麼地圖?您如何創建和使用它們?的詳細內容。更多資訊請關注PHP中文網其他相關文章!