为什么对零值 big.Int
调用 .Bytes()
会返回长度为 0 的 slice ?
// uint64
var x uint64
xb := make([]byte, 8)
binary.BigEndian.PutUint64(xb, x)
// [0 0 0 0 0 0 0 0]
fmt.Println(xb)
// uint8
var y uint8
yb := []byte{byte(y)}
// [0]
fmt.Println(yb)
// big.Int
z := big.Int{}
zb := z.Bytes()
// [] Why is this an empty slice and not [0]
fmt.Println(zb)
最佳答案
big.Int
存储它在 slice 中表示的数字的绝对值。 big.Int
记录了“Int 的零值代表值 0”。因此,在零值(表示 0
)中, slice 将为空( slice 的零值是 nil
并且 nil
slice 的长度是0
)。
推理很简单:如果您不使用 big.Int
值,则不需要分配 slice 。零是最特殊的,也可能是最常见的值,使用这个简单的技巧是“无需动脑筋”的优化。
关于go - 为什么 0 big.Int 的 .Bytes() 值是空 slice ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73448979/