Go 如何计算映射中键的哈希值?它真的是独一无二的吗?是否可以用于其他结构?
我想对于像这样的原始键来说很容易int
或不可变的string
但这对于复合结构来说似乎并不简单。
语言规范没有说明,这意味着它可以随时更改,或者在实现之间有所不同。
哈希算法在类型和平台之间有所不同。截至目前:在 x86(32 或 64 位)上,如果 CPU 支持 AES 指令,则运行时使用aeshash
,基于 AES 原语构建的哈希,否则它使用“受 xxHash 和 cityhash 启发”的函数,但与两者都不同。 32 位和 64 位系统有不同的变体。大多数类型使用其内存内容的简单散列,但浮点类型具有代码来确保 0 和 -0 相等地散列(因为它们比较相等)和 NaN 随机散列(因为两个 NaN 永远不相等)。由于复杂类型是由浮点数构建的,因此它们的哈希值由两个浮点部分的哈希值组成。接口的哈希值是存储在接口中的值的哈希值,而不是接口标头本身。
- 所有这些东西都在私有函数中,所以不,你不能在你自己的代码中访问 Go 的内部哈希值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)