由于近期个人原因导致更新停滞了,非常抱歉。另外后台数据显示前几篇文章的完整阅读率只有30%~40%,所以此后尽量压缩篇幅到之前的1/3,减少大家的阅读压力。
本篇讲解golang语言中的map数据结构,即由键值对构成的无序数据。map数据结构在python、java等多种语言中实现,其主要特点是能通过键(key)快速查询值(value)。
map的常见操作有:声明、赋值、添加、删除、查询、遍历、清空等
varstuMapmap
map的常见方法有:键值存在性、排序、嵌套
data
map的基本操作就是这样,这里有2个地方需要注意:
第一、map为引用类型,传递参数的时候传递引用,而不是值传递,所以修改后外部是会改变的。
第二、map的内部存储结构是可能重新组织的,比如大量数据需要优化树状结构时会引起map存储结构改变。也就是说对某个具体的数据取地址是可能改变的,之后使用按址查询的时候可能查询错误,所以不能直接对map的元素取地址。
sync.Map
在go的并发编程中,不可避免的要考虑线程安全性问题;针对map数据结构,golang提供sync.Map保证线程安全。具体的实现原理这里先不讲解,目前主要讲解用法。如下所示,使用sync.Map类型保证线程安全,所以在并发中使用map数据类型时应选择sync.Map。
package