我正在编写一个需要散列任意对象的数据结构。如果我给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
上调用此选项会导致:
恐慌:binary.Write:无效的类型int
这样做的正确方法是什么?
答案 0 :(得分:3)
我发现这样做的一个好方法是使用“gob”包序列化对象,顺序如下:
var (
digest = md5.New()
encoder = gob.NewEncoder(digest)
)
func Hash(obj interface{}) []byte {
digest.Reset()
if err := encoder.Encode(obj); err != nil {
panic(err)
}
return digest.Sum()
}
编辑:这不符合预期(见下文)。
答案 1 :(得分:2)
binary.Write写入“固定大小的值或指向固定大小值的指针”。类型int不是固定大小的值; int是“32位或64位”。使用固定大小的值,如int32。