散列任意对象的正确方法
我正在编写一个需要散列任意对象的数据结构。如果我给出一个 int
参数,以下函数似乎会失败。
func Hash( obj interface{} ) []byte {
digest := md5.New()
if err := binary.Write(digest, binary.LittleEndian, obj); err != nil {
panic(err)
}
return digest.Sum()
}
在 int
上调用它会导致:
恐慌:二进制。写入:int 类型无效
执行此操作的正确方法是什么?
I am writing a data structure that needs to hash an arbitrary object. The following function seems to fail if I give an int
is the parameter.
func Hash( obj interface{} ) []byte {
digest := md5.New()
if err := binary.Write(digest, binary.LittleEndian, obj); err != nil {
panic(err)
}
return digest.Sum()
}
Calling this on an int
results in:
panic: binary.Write: invalid type int
What is the right way to do this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我发现执行此操作的一个好方法是使用“gob”包序列化对象,如下所示:
编辑:这不会按预期工作(见下文)。
I found that a good way to do this is to serialize the object using the "gob" package, along the following lines:
Edit: This does not work as intended (see below).
binary.Write 写入“一个固定大小的值或指向固定大小的指针价值。”类型 int 不是固定大小值; int 是“32 位或 64 位”。使用固定大小的值,例如 int32。
binary.Write writes "a fixed-size value or a pointer to a fixed-size value." Type int is not a fixed size value; int is "either 32 or 64 bits." Use a fixed-size value like int32.