这是我参与11月更文挑战的第28天,活动详情查看:2021最后一次更文挑战
map
map是一种方便且强大的内置数据结构,它将一种类型(键)的值与另一种类型(元素或值) 的值相关联。 键可以是定义了”相等运算“的任何类型(就是能够使用==判断的),例如整数、 浮点数和复数、字符串、指针、接口(只要动态类型支持相等)、结构和数组。 切片不能用作映射键,因为它们没有定义相等性。 像切片一样,映射保存对底层数据结构的引用。 如果您将map传递给更改map内容的函数,则更改将在调用方中可见。
可以使用带有冒号分隔的键值对写法来构建映射,因此在初始化期间很容易构建它们。
var timeZone = map[string]int{
"UTC": 0*60*60,
"EST": -5*60*60,
"CST": -6*60*60,
"MST": -7*60*60,
"PST": -8*60*60,
}
设置和获取map的值在语法上看起来就像对数组和切片是一样的操作,只是索引不需要一定是整数。
offset := timeZone["EST"]
尝试使用map中不存在的key获取其映射值,将返回映射中key类型的零值。 例如,如果map包含整数, 查找不存在的键将返回 0。set可以实现为值类型为 bool 的map。 将map条目设置为 true ,并将值放入集合中, 然后通过简单的索引对其进行测试。
attended := map[string]bool{
"Ann": true,
"Joe": true,
...
}
if attended[person] { // will be false if person is not in the map
fmt.Println(person, "was at the meeting")
}
有时您需要将缺失的条目与零值区分开来。 例如判断是否有“UTC”的条目或者是 0,有可能它根本不在map中? 你可以用多重赋值的形式来区分。
var seconds int
var ok bool
seconds, ok = timeZone[tz]
出于显而易见的原因,这被称为“ok 命令”语句。 在这个例子中,如果 tz 存在,second将被适当地设置并且 ok 为真; 如果没有,second将被设置为零,确定将是假的。 这是一个将它与一个很好的错误报告放在一起的函数: