跳到主要内容

go-map映射

  • map 声明、初始化
  • nil map、引用语义、key 类型限制
    • nil map 表示只声明、但没有初始化的 map:
  • ok 判断
  • map遍历
  • map性能和实践

声明和初始化​

  • 使用 make 初始化
go
// 声明一个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 关键字,只是约定俗成的变量名
  • 第二个返回值,用来判断键是否存在
go
value, ok := myMap[key]

遍历map​

  • 使用 range 遍历 key 和 value:
go
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 字面量初始化。
go
var m map[string]int
m["a"] = 1 // panic

容量参数只是预估值​

  • 这里的 100 是预估容量,不代表 map 只能保存 100 个元素
go
m := make(map[string]int, 100)