map的使用
- 基础
- 对key的要求:必须是支持
**==**
运算符的数据类型,所以map可以通过key的全等进行比较。所以不太建议使用浮点数作为key,比如出现的NaN与任何浮点数都不相等。结构体的比较有点复杂,情况比较多,需谨慎 - 使用
delete(map, key)
函数可以删除指定的kv对。访问map中一个不存在的key是安全的(会返回零值),delete也是如此 - 但是在使用map的使用,绝大多数的操作都是安全的,你可以访问 == nil的map的元素等等。但是你不能进行存放操作
- 迭代的顺序是不确定的(而且设计者为了避免大家依赖其顺序,会故意打乱顺序并输出),如果想要顺序访问,可以抽取一个[]key,排序,并用这个去访问
if value, ok := map[key]
,就像interface断言一样。请使用ok来判断是否存在kv对
- 对key的要求:必须是支持
- 关于value
- 如果是struct,则无法对其某个具体的字段进行修改。大意是由于可能会rehash、扩容等,不允许寻址的操作。这个部分需要深入了解
底层
扩容
负载因子 = key数量 / bucket数量
Links
- 圣经,较基础