米琪卡哇伊
如果您使用不同的类型和不同的编码器,它也不是确定性的。例子:package mainimport ( "bytes" "crypto/sha1" "encoding/gob" "encoding/hex" "log")func main() { encint() encint64() encstring()}func encint() { s1 := []int{0, 2, 4, 5, 7} buf2 := bytes.Buffer{} enc2 := gob.NewEncoder(&buf2) enc2.Encode(s1)}func encint64() { s1 := []int64{0, 2, 4, 5, 7} buf2 := bytes.Buffer{} enc2 := gob.NewEncoder(&buf2) enc2.Encode(s1)}func encstring() { s1 := []string{"a", "b", "c", "d"} buf2 := bytes.Buffer{} enc2 := gob.NewEncoder(&buf2) enc2.Encode(s1) log.Println(buf2.Bytes()) hash := sha1.New() hash.Write(buf2.Bytes()) ret := hash.Sum(nil) log.Println(hex.EncodeToString(ret))}在Go Playground 中奔跑请注意,如果你注释掉encint()或者encint64()在encstring会产生不同的字节和不同的哈希码。尽管使用了不同的对象/指针,但还是会发生这种情况。