Skip to content

Map

Map 是 Go 内建的关联数据类型 (在一些其他的语言中也被称为 哈希(hash) 或者 字典(dict) )。

代码示例

package main

import "fmt"

func main() {
    // 要创建一个空 map,需要使用内建函数 make:make(map[key-type]val-type)。
    m := make(map[string]int)

    // 使用典型的 name[key] = val 语法来设置键值对。
    m["k1"] = 7
    m["k2"] = 13

    // 打印 map。例如,使用 fmt.Println 打印一个 map,会输出它所有的键值对。
    fmt.Println("map:", m)

    // 使用 name[key] 来获取一个键的值。
    v1 := m["k1"]
    fmt.Println("v1", v1)

    // 内建函数 len 可以返回一个 map 的键值对数量。
    fmt.Println("len:", len(m))

    // 内建函数 delete 可以从一个 map 中移除键值对。
    delete(m, "k2")
    fmt.Println("map:", m)

    // 当从一个 map 中取值时,还有可以选择是否接收的第二个返回值,该值表明了 map 中是否存在这个键。 这可以用来消除 键不存在 和 键的值为零值 产生的歧义, 例如 0 和 ""。这里我们不需要值,所以用 空白标识符(blank identifier) _ 将其忽略。
    _, prs := m["k2"]
    fmt.Println("prs", prs)

    // 也可以通过右边的语法在一行代码中声明并初始化一个新的 map。
    n := map[string]int{"foo": 1, "bar": 2}
    fmt.Println("map:", n)
}

执行结果

# 注意,使用 fmt.Println 打印一个 map 的时候, 是以 map[k:v k:v] 的格式输出的。
$ go run maps.go 
map: map[k1:7 k2:13]
v1 7
len: 2
map: map[k1:7]
prs false
map: map[bar:2 foo:1]