go语言map函数 go语言中的map( 六 )


当Go的map长度增长到大于加载因子所需的map长度时,Go语言就会将产生一个新的bucket数组,然后把旧的bucket数组移到一个属性字段oldbucket中 。注意:并不是立刻把旧的数组中的元素转义到新的bucket当中,而是,只有当访问到具体的某个bucket的时候,会把bucket中的数据转移到新的bucket中 。
如下图所示:当扩容的时候,Go的map结构体中,会保存旧的数据,和新生成的数组
上面部分代表旧的有数据的bucket,下面部分代表新生成的新的bucket 。蓝色代表存有数据的bucket,橘黄色代表空的bucket 。
扩容时map并不会立即把新数据做迁移,而是当访问原来旧bucket的数据的时候,才把旧数据做迁移,如下图:
注意:这里并不会直接删除旧的bucket,而是把原来的引用去掉,利用GC清除内存 。
map中数据的删除
如果理解了map的整体结构,那么查找、更新、删除的基本步骤应该都很清楚了 。这里不再赘述 。
值得注意的是 , 找到了map中的数据之后,针对key和value分别做如下操作:
1
2
3
4
1、如果``key``是一个指针类型的,则直接将其置为空,等待GC清除;
2、如果是值类型的,则清除相关内存 。
3、同理 , 对``value``做相同的操作 。
4、最后把key对应的高位值对应的数组index置为空 。
【go语言map函数 go语言中的map】go语言map函数的介绍就聊到这里吧,感谢你花时间阅读本站内容 , 更多关于go语言中的map、go语言map函数的信息别忘了在本站进行查找喔 。

推荐阅读