map 映射表
这是一个键值对的集合。
类型:map[keyType]valueType{}
使用 make 创建和初始化。
go
type Vertex struct {
Lat, Long float64
}
func main() {
m = make(map[string]Vertex)
m["Bell Labs"] = Vertex{
40.68433, -74.39967,
}
fmt.Println(m["Bell Labs"])
}示例
一个键值对类型,键和值都可以为任意类型。
go
package main
import "fmt"
type Vertex struct {
Lat, Long float64
}
var m = map[string]Vertex{
"Bell Labs": Vertex{
40.68433, -74.39967,
},
"Google": Vertex{
37.42202, -122.08408,
},
}
func main() {
fmt.Println(m)
}运行结果:
map[Bell Labs:{40.68433 -74.39967} Google:{37.42202 -122.08408}]忽视顶层类型名
go
var m = map[string]Vertex{
"Bell Labs": {40.68433, -74.39967}, // 值的类型名在代码里被忽略了
"Google": {37.42202, -122.08408},
}零值
map 的零值为 nil。零值 map 没有任何东西,也不能往里面加入东西。
修改/读取映射
插入或修改元素:m[key] = elem
获取元素:elem = m[key]
删除元素:delete(m, key)
通过双赋值检测某个键是否存在,返回ok内的结果为true/false:elem, ok = m[key]
注:若 elem 或 ok 还未声明,你可以使用短变量声明: elem, ok := m[key]
go
func main() {
m := make(map[string]int)
m["答案"] = 42
fmt.Println("值:", m["答案"])
m["答案"] = 48
fmt.Println("值:", m["答案"])
delete(m, "答案")
fmt.Println("值:", m["答案"])
v, ok := m["答案"]
fmt.Println("值:", v, "是否存在?", ok)
}运行结果:
值: 42
值: 48
值: 0
值: 0 是否存在? false