假设我有一个包含int64和bools的结构类型,以及包含更多int64和bool类型字段的嵌入类型。
type T1 struct {
f1 int64
f2 int64
f3 bool
T2 T2
}
type T2 struct {
f4 int64
f5 int64
f6 bool
}
现在使用所有结构域/属性,我想生成一个哈希码。
这样做的目的是确定实例的内容是否已更改,但是比较了之前/之后的哈希码值。
因此,如果T1实例已经改变,即它自己的任何属性那么哈希的值应该是不同的。
答案 0 :(得分:0)
您可以使用以下内容:
func (t *T1) Hash() uint64 {
hb := make([]byte, 8+8+1+8+8+1)
binary.BigEndian.PutUint64(hb, uint64(t.f1))
binary.BigEndian.PutUint64(hb[8:], uint64(t.f2))
if t.f3 {
hb[16] = 1
}
binary.BigEndian.PutUint64(hb[17:], uint64(t.T2.f4))
binary.BigEndian.PutUint64(hb[25:], uint64(t.T2.f5))
if t.T2.f6 {
hb[33] = 1
}
f := fnv.New64a()
f.Write(hb)
return f.Sum64()
}
虽然如果你将它用作地图键,最好直接使用struct作为键,然后放手操作。