選單
×
   ❮   
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

Go Map


Go Map

Map 用於以 key:value 對的形式儲存資料值。

Map 中的每個元素都是一個 key:value 對。

Map 是一個無序且可變的集合,不允許重複。

Map 的長度是其元素的數量。您可以使用 len() 函式找到它。

Map 的預設值為 nil。

Map 引用底層雜湊表。

Go 提供了多種建立 Map 的方法。


使用 var:= 建立 Map

語法

var a = map[KeyType]ValueType{key1:value1, key2:value2,...}
b := map[KeyType]ValueType{key1:value1, key2:value2,...}

示例

此示例展示瞭如何在 Go 中建立 Map。請注意程式碼中的順序和輸出中的順序。

package main
import ("fmt")

func main() {
  var a = map[string]string{"brand": "Ford", "model": "Mustang", "year": "1964"}
  b := map[string]int{"Oslo": 1, "Bergen": 2, "Trondheim": 3, "Stavanger": 4}

  fmt.Printf("a\t%v\n", a)
  fmt.Printf("b\t%v\n", b)
}

結果

a   map[brand:Ford model:Mustang year:1964]
b   map[Bergen:2 Oslo:1 Stavanger:4 Trondheim:3]
自己動手試一試 »

注意:程式碼中定義的 Map 元素的順序與它們儲存的方式不同。資料以高效檢索 Map 的方式儲存。



使用 make() 函式建立 Map

語法

var a = make(map[KeyType]ValueType)
b := make(map[KeyType]ValueType)

示例

此示例展示瞭如何使用 make() 函式在 Go 中建立 Map。

package main
import ("fmt")

func main() {
  var a = make(map[string]string) // Map 現在是空的
  a["brand"] = "Ford"
  a["model"] = "Mustang"
  a["year"] = "1964"
                                 // a 不再是空的
  b := make(map[string]int)
  b["Oslo"] = 1
  b["Bergen"] = 2
  b["Trondheim"] = 3
  b["Stavanger"] = 4

  fmt.Printf("a\t%v\n", a)
  fmt.Printf("b\t%v\n", b)
}

結果

a   map[brand:Ford model:Mustang year:1964]
b   map[Bergen:2 Oslo:1 Stavanger:4 Trondheim:3]
自己動手試一試 »

建立一個空 Map

有兩種建立空 Map 的方法。一種是使用 make() 函式,另一種是使用以下語法。

語法

var a map[KeyType]ValueType

注意: make() 函式是建立空 Map 的正確方法。如果您以其他方式建立空 Map 並向其寫入資料,則會導致執行時恐慌。

示例

此示例顯示了使用 make() 函式和不使用它來宣告空 Map 之間的區別。

package main
import ("fmt")

func main() {
  var a = make(map[string]string)
  var b map[string]string

  fmt.Println(a == nil)
  fmt.Println(b == nil)
}

結果

false
true
自己動手試一試 »

允許的鍵型別

Map 鍵可以是任何定義了相等運算子(==)的資料型別。這些包括

  • 布林值
  • 數字
  • 字串
  • 陣列
  • 指標
  • 結構體
  • 介面(只要動態型別支援相等性)

無效的鍵型別為

  • 切片
  • Map
  • 函式

這些型別無效,因為相等運算子(==)未為其定義。


允許的值型別

Map 的值可以是任何型別。


訪問 Map 元素

您可以透過以下方式訪問 Map 元素

語法

value = map_name[key]

示例

package main
import ("fmt")

func main() {
  var a = make(map[string]string)
  a["brand"] = "Ford"
  a["model"] = "Mustang"
  a["year"] = "1964"

  fmt.Printf(a["brand"])
}

結果

福特
自己動手試一試 »

更新和新增 Map 元素

更新或新增元素的方法是

語法

map_name[key] = value

示例

此示例展示瞭如何更新和新增 Map 中的元素。

package main
import ("fmt")

func main() {
  var a = make(map[string]string)
  a["brand"] = "Ford"
  a["model"] = "Mustang"
  a["year"] = "1964"

  fmt.Println(a)

  a["year"] = "1970" // 更新一個元素
  a["color"] = "red" // 新增一個元素

  fmt.Println(a)
}

結果

map[brand:Ford model:Mustang year:1964]
map[brand:Ford color:red model:Mustang year:1970]
自己動手試一試 »

從 Map 中刪除元素

使用 delete() 函式刪除元素。

語法

delete(map_name, key)

示例

package main
import ("fmt")

func main() {
  var a = make(map[string]string)
  a["brand"] = "Ford"
  a["model"] = "Mustang"
  a["year"] = "1964"

  fmt.Println(a)

  delete(a,"year")

  fmt.Println(a)
}

結果

map[brand:Ford model:Mustang year:1964]
map[brand:Ford model:Mustang]
自己動手試一試 »

檢查 Map 中的特定元素

您可以使用以下方法檢查 Map 中是否存在某個鍵

語法

val, ok :=map_name[key]

如果您只想檢查某個鍵是否存在,可以使用空白識別符號(_)代替 val。

示例

package main
import ("fmt")

func main() {
  var a = map[string]string{"brand": "Ford", "model": "Mustang", "year": "1964", "day":""}

  val1, ok1 := a["brand"] // 檢查存在的鍵及其值
  val2, ok2 := a["color"] // 檢查不存在的鍵及其值
  val3, ok3 := a["day"]   // 檢查存在的鍵及其值
  _, ok4 := a["model"]    // 只檢查存在的鍵而不檢查其值

  fmt.Println(val1, ok1)
  fmt.Println(val2, ok2)
  fmt.Println(val3, ok3)
  fmt.Println(ok4)
}

結果

Ford true
 false
 true
true
自己動手試一試 »

示例解釋

在此示例中,我們檢查了 Map 中不同鍵的存在性。

鍵 "color" 不存在於 Map 中。因此,值為空字串('')。

ok2 變數用於判斷鍵是否存在。因為即使 "color" 鍵的值為空,我們也會得到相同的值。val3 的情況也是如此。


Map 是引用

Map 是雜湊表的引用。

如果兩個 Map 變數引用同一個雜湊表,則更改一個變數的內容會影響另一個變數的內容。

示例

package main
import ("fmt")

func main() {
  var a = map[string]string{"brand": "Ford", "model": "Mustang", "year": "1964"}
  b := a

  fmt.Println(a)
  fmt.Println(b)

  b["year"] = "1970"
  fmt.Println("After change to b:")

  fmt.Println(a)
  fmt.Println(b)
}

結果

map[brand:Ford model:Mustang year:1964]
map[brand:Ford model:Mustang year:1964]
更改 b 後
map[brand:Ford model:Mustang year:1970]
map[brand:Ford model:Mustang year:1970]
自己動手試一試 »

遍歷 Map

您可以使用 range 來遍歷 Map。

示例

此示例展示瞭如何遍歷 Map 中的元素。請注意輸出中元素的順序。

package main
import ("fmt")

func main() {
  a := map[string]int{"one": 1, "two": 2, "three": 3, "four": 4}

  for k, v := range a {
    fmt.Printf("%v : %v, ", k, v)
  }
}

結果

two : 2, three : 3, four : 4, one : 1,
自己動手試一試 »

按特定順序遍歷 Map

Map 是無序資料結構。如果您需要按特定順序遍歷 Map,則必須有一個單獨的資料結構來指定該順序。

示例

package main
import ("fmt")

func main() {
  a := map[string]int{"one": 1, "two": 2, "three": 3, "four": 4}

  var b []string             // 定義順序
  b = append(b, "one", "two", "three", "four")

  for k, v := range a {        // 無序迴圈
    fmt.Printf("%v : %v, ", k, v)
  }

  fmt.Println()

  for _, element := range b {  // 按定義的順序迴圈
    fmt.Printf("%v : %v, ", element, a[element])
  }
}

結果

two : 2, three : 3, four : 4, one : 1,
one : 1, two : 2, three : 3, four : 4,
自己動手試一試 »

×

聯絡銷售

如果您想將 W3Schools 服務用於教育機構、團隊或企業,請傳送電子郵件給我們
sales@w3schools.com

報告錯誤

如果您想報告錯誤,或想提出建議,請傳送電子郵件給我們
help@w3schools.com

W3Schools 經過最佳化,旨在方便學習和培訓。示例可能經過簡化,以提高閱讀和學習體驗。教程、參考資料和示例會不斷審查,以避免錯誤,但我們無法保證所有內容的完全正確性。使用 W3Schools 即表示您已閱讀並接受我們的使用條款Cookie 和隱私政策

版權所有 1999-2024 Refsnes Data。保留所有權利。W3Schools 由 W3.CSS 提供支援