为了账号安全,请及时绑定邮箱和手机立即绑定

go 如何计算映射中键的哈希值?

go 如何计算映射中键的哈希值?

Go
喵喔喔 2022-01-17 10:46:19
Go 如何计算映射中键的哈希值?它真的是独一无二的吗?是否可以在其他结构中使用?我想像int或不可变的原始键很容易,string但对于复合结构来说似乎并不简单。
查看完整描述

2 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

  1. 语言规范没有说,这意味着它可以随时自由更改,或者在实现之间有所不同。

  2. 哈希算法在类型和平台之间有所不同。截至目前:在 x86(32 位或 64 位)上,如果 CPU 支持 AES 指令,则运行时使用aeshash基于 AES 原语构建的散列,否则它使用“受”xxHash 和 cityhash 启发的函数,但两者都不同。32 位和 64 位系统有不同的变体。大多数类型使用其内存内容的简单散列,但浮点类型具有代码以确保 0 和 -0 散列相等(因为它们比较相等)和 NaN 随机散列(因为两个 NaN 永远不相等)。由于复杂类型是从浮点数构建的,因此它们的散列由它们的两个浮点部分的散列组成。并且接口的散列是存储在接口中的值的散列,而不是接口标头本身。

  3. 所有这些东西都在私有函数中,所以不,你不能在你自己的代码中访问 Go 的内部哈希值。


查看完整回答
反对 回复 2022-01-17
?
温温酱

TA贡献1752条经验 获得超4个赞

Go 地图实现使用一个名为aeshash. 它不是 AES,但它使用 aesenc 汇编指令来计算哈希。此哈希不会导出以在标准库中使用。

哈希本身是用汇编编写的,可以在运行时包源中找到。


查看完整回答
反对 回复 2022-01-17
  • 2 回答
  • 0 关注
  • 228 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号