英文:
What data structure do Go maps use internally?
问题
我对以下内容感兴趣:
- Go语言中的地图是如何在内部实现的?(哈希表、树形结构...)
- 如果Go语言中的地图是哈希表,使用的是哪个哈希函数?
- 如果Go语言中的地图是树形结构,是AVL树、红黑树还是其他类型?
- 如果Go语言中的地图是基于数组的,它们是如何避免/处理冲突的?
英文:
I'm interested in the following:
- How are Go maps implemented internally? (hash tables, trees...)
- If Go maps are hash tables, which hash function is used?
- If Go maps are trees, are they AVL, red-black, or some other type?
- If Go maps are array-based, how do they avoid/handle collisions?
答案1
得分: 7
Go maps在内部是哈希表。
正如@twotwotwo在评论中澄清的那样,如果CPU支持相关指令,Go将使用基于AES的哈希函数。
否则,Go将使用FNV哈希函数(由Patrick Mylund Nielsen在Go-Nuts中提到)。
链接:
- 官方Go博客:http://blog.golang.org/go-maps-in-action
- Map源代码:http://golang.org/src/pkg/runtime/hashmap.c
- Hash源代码:http://golang.org/src/pkg/runtime/alg.c
- GoNuts讨论组:https://groups.google.com/forum/#!topic/golang-nuts/PY3CCBtbDsQ
英文:
Go maps are hash tables internally
As @twotwotwo clarified in the comment, Go will use an AES-based hash if the CPU has supporting instructions for it.
Otherwise Go will use a FNV hash function (As stated by Patrick Mylund Nielsen @ Go-Nuts)
Links:
- Official Go Blog: http://blog.golang.org/go-maps-in-action
- Map Source Code: http://golang.org/src/pkg/runtime/hashmap.c
- Hash Source Code: http://golang.org/src/pkg/runtime/alg.c
- GoNuts Group: https://groups.google.com/forum/#!topic/golang-nuts/PY3CCBtbDsQ
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论