创建 map
var map1 map[string]string // 必须声明 map 的 key 和 value 的数据类型。map1 默认为 nil
map2 := map[string]string{ // 同时初始化
"key1": "value1", // 结尾必须加逗号
}
map3 := make(map[string]string)
添加、修改元素
map2["key2"] = "value2"
删除元素
delete(map2, "key3") // 如果 key3 不存在,也不会抛异常
获取元素
s := map2["key3"]
如果 key 不存在,会返回 value 的数据类型的默认值(比如,如果设置了 value 的类型是string
,则返回空字符串)
但如果是这样的话,下面两种情况是无法分出来的:
key3
不存在,所以返回 空字符串。key3
存在,但key3
对应的value3
就是空字符串,所以返回 空字符串。
所以有了下面这种写法:
str, ok := map2["key3"]
如果是上述情况 1,ok
是false
,而情况 2 对应的ok
是true
。
遍历 map
for key, value := range map2 {
fmt.Println(key, value)
}
map 的 key 的类型
map 的 key 不是所有类型都支持,该类型需要能进行==
或!=
操作才能支持。
- 基本数据类型 都支持。
- 字符串 支持 (Go 中字符串其实可以算作基本数据类型了)。
- 数组 支持 (Go 中数组是值类型,用
==
、!=
对比时对比的是每个值,而非首地址,Go 中数组其实可以当作基本数据类型来使用了)。 - 切片 不支持。