创建 map

  1. var map1 map[string]string // 必须声明 map 的 key 和 value 的数据类型。map1 默认为 nil
  2. map2 := map[string]string{ // 同时初始化
  3. "key1": "value1", // 结尾必须加逗号
  4. }
  5. map3 := make(map[string]string)

添加、修改元素

  1. map2["key2"] = "value2"

删除元素

  1. delete(map2, "key3") // 如果 key3 不存在,也不会抛异常

获取元素

  1. s := map2["key3"]

如果 key 不存在,会返回 value 的数据类型的默认值(比如,如果设置了 value 的类型是string,则返回空字符串

但如果是这样的话,下面两种情况是无法分出来的:

  1. key3不存在,所以返回 空字符串。
  2. key3存在,但key3对应的value3就是空字符串,所以返回 空字符串。

所以有了下面这种写法:

  1. str, ok := map2["key3"]

如果是上述情况 1,okfalse,而情况 2 对应的oktrue

遍历 map

  1. for key, value := range map2 {
  2. fmt.Println(key, value)
  3. }

map 的 key 的类型

map 的 key 不是所有类型都支持,该类型需要能进行==!=操作才能支持。

  • 基本数据类型 都支持。
  • 字符串 支持 (Go 中字符串其实可以算作基本数据类型了)。
  • 数组 支持 (Go 中数组是值类型,用==!=对比时对比的是每个值,而非首地址,Go 中数组其实可以当作基本数据类型来使用了)。
  • 切片 不支持。