直接初始化
var m = map[int]int{}m[1] = 1fmt.Println(m[1])
使用make初始化(常用)
m := make(map[int]int)m[1] = 1fmt.Println(m[1])
ok为false时,代表key不存在
m := make(map[int]int)m[1] = 1value, ok := m[1]if !ok {fmt.Println("key不存在")} else {fmt.Println(value)}
遍历map时,可以同时得到key和value
m := make(map[int]string)m[1] = "A"m[2] = "B"//结果为://key: 1, value: A//key: 2, value: Bfor k, v := range m {fmt.Println(fmt.Sprintf("key: %d, value: %s", k, v))}
map key的选择:只要能比较就可以。除了常见的int、string,还可以是自定义结构体。
map key不能是 slice,map,function,结构体包含这些元素也不可以,会提示
Invalid map key type: comparison operators == and != must be fully defined for the key type
map源代码: src/runtime/map.go
原理可以看这一篇
深入理解Golang Map原理_golang map实现原理_天涯泛孤舟的博客-CSDN博客