本文的源码分析基于:版本:version go 1.13
map(字典、映射)在不同语言中都有这类 kv
的数据结构。每种语言的实现也不尽相同。那么go是怎么实现的呢?Go
语言采用的是哈希查找表,并且使用链表解决哈希冲突。注:python
采用的是二次寻址的方式解决哈希冲突的。
1.底层数据结构#
map的内部实现示意图:
map的定义:runtime/map.go
1 | // A header for a Go map. |
一直说桶数组,桶于是什么鬼?
源码:
1 | // A bucket for a Go map. |
上面的bmap
结构体只是初步的,在编译的时候会进行添加属性。会变成动态的创建一个新的
1 | type bmap struct { |