创建 map
var map1 map[string]string // 必须声明 map 的 key 和 value 的数据类型。map1 默认为 nilmap2 := 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 中数组其实可以当作基本数据类型来使用了)。 - 切片 不支持。
 
