go - 为什么 0 big.Int 的 .Bytes() 值是空 slice ?

标签 go slice bigint

为什么对零值 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 。零是最特殊的,也可能是最常见的值,使用这个简单的技巧是“无需动脑筋”的优化。

查看相关问题:Is there another way of testing if a big.Int is 0?

关于go - 为什么 0 big.Int 的 .Bytes() 值是空 slice ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73448979/

相关文章:

mysql 使用外键将 int 列更改为 bigint

go - 查找 Go 程序的测试依赖项

Golang tcp客户端服务器程序

Golang 静态标识符解析

go - 使用 github.com/spf13/cobra 获取参数值

python - 在 Python 中从一组数字创建 "slice notation"样式列表

reference - 在 Rust 中将 Vec<Box<Foo>> 转换为 &[&Foo]

javascript - 解读 Uniswap V3 价格

objective-c - 如何切片 NSMutableArray

sql-server - SQL Server varbinary bigint 与 BitConverter.ToInt64 值不同