Golang|学习教程(五)-map
本小节学习go语言的map,map里面存储着键值对,通过键来快速获取对应的值,我们使用map[T]T
格式来定义集合,需要注意的是key的限制,map中的key可以是bool,数字,string,指针,channel还可以是只包含前面几个类型的接口,结构体,数组,但是不能使用slice,map还有function作为key,因为这几个没法用==来判断。
map的底层原理是将每个key经过hash运算,根据运算得到的hash值选择合适的hash bucket(hash桶),让后将各个key/value存放到选定的hash bucket中,如果遇到hash冲突则采用链地址法扩展存储。具体map的原理可以参考Golang|map。
初始化
我们可以通过make函数来初始化一个map。
|
|
查询
map的查询,可以通过key来获取集合对应的值。
|
|
需要注意的是,如果集合中不存在key时,map返回类型的默认值。同时我们也可以通过以下方式判断是否存在key。
|
|
map的变量可以使用for ... range
形式。
|
|
需要注意,map的返回顺序是随机的。
写入
当我们谈到map写入的时候一定要记住的便是nil的map是不允许写入的,会报panic。
|
|
我们通过指定key来写入集合,如果多次写入,则最新的写入会覆盖之前的值。此外还需要注意map是非线程安全的,多个线程读写map会发生panic。
最后我们可以通过delete
函数来删除map的kv。
|
|