go-map映射
- map 声明、初始化
- nil map、引用语义、key 类型限制
nil map表示只声明、但没有初始化的 map:
- ok 判断
- map遍历
- map性能和实践
声明和初始化
- 使用 make 初始化
// 声明一个map,key和value类型都是string
var user map[string]string
user := map[string]string{
"name": "Tom",
"city": "Beijing",
}
user := make(map[string]string)
判断键是否存在
- 在map中,查询map 时,可以接收两个返回值
value:key 对应的值ok:布尔值,表示 key 是否存在ok不是 Go 关键字,只是约定俗成的变量名
- 第二个返回值,用来判断键是否存在
value, ok := myMap[key]
遍历map
- 使用
range遍历 key 和 value:
func main() {
person := map[string]string{
"name": "张三",
"city": "杭州",
"job": "程序员",
}
for key, value := range person {
fmt.Println(key, value)
}
}
常见注意点
- 1、nil map 不能写入
- 2、读取不存在的 key 会返回零值
- 3、嵌套 map 的内层 map 需要单独初始化
- 4、容量参数只是预估值
- 5、map 遍历顺序不固定
- 不能依赖
range的顺序。如果需要稳定顺序,应先取出 key 并排序。
- 不能依赖
nil map 不能写入
nil map可以读,不能写;写入前使用make或 map 字面量初始化。
var m map[string]int
m["a"] = 1 // panic
容量参数只是预估值
- 这里的
100是预估容量,不代表 map 只能保存 100 个元素
m := make(map[string]int, 100)