跳转至

Map 与字符串:查找时区分零值和不存在

map 存储键值对,使用前必须初始化。读取不存在的键会返回值类型的零值;因此当零值本身有意义时,要使用第二个返回值判断键是否存在。

scores := map[string]int{"Alice": 90}

score, ok := scores["Bob"]
if !ok {
    fmt.Println("没有该用户")
}
fmt.Println(score) // 0

删除键使用 delete(scores, "Alice")。遍历 map 的顺序不保证稳定,不能依赖它生成固定顺序的输出;需要排序时先取出键并排序。

字符串是字节序列

Go string 保存的是只读字节序列,通常包含 UTF-8 文本。len(s) 返回字节数,不是 Unicode 字符数。需要按 Unicode 码点遍历时使用 range

for index, runeValue := range "你好" {
    fmt.Println(index, runeValue)
}

这里 index 是字节偏移量,runeValue 是 Unicode 码点。

参考

评论