为什么Go中big.NewInt(0).Bytes()返回[]而非[0]?
big.NewInt(0).Bytes()返回空切片属于标准库正常设计 这个行为完全符合Gomath/big包的设计预期,没有任何异常。
设计原因
Int.Bytes()方法的官方定义是返回大整数绝对值的大端无符号字节表示,且该表示默认会去掉所有前导零,保证每个非负整数对应唯一的字节序列。- 数值0没有任何非零的有效字节,去掉前导零后自然就剩下空切片。如果0返回
[]byte{0},反而会破坏字节表示的唯一性规则:比如数值1就可以被表示为[]byte{1}、[]byte{0, 1}等多种形式,不符合序列化场景下的唯一性要求。
兼容处理方案
如果你的业务场景需要数值0对应返回[]byte{0},可以自行封装转换方法:
func BigIntToBytes(n *big.Int) []byte { b := n.Bytes() if len(b) == 0 { return []byte{0} } return b }
内容的提问来源于stack exchange,提问作者Toni
相关产品推荐
相关产品推荐

