为什么对零值big.Int调用.Bytes()会返回长度为0的片段?

    // 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存储它在切片中表示的数字的绝对值.big.Int份文件,"the zero value for an Int represents the value 0"份.因此,在零值(表示0)中,切片将为空(切片的零值为nil,nil切片的长度为0).

理由很简单:在不使用big.Int值的情况下,它不需要为片分配空间.零是最特殊也可能是最常见的值,使用这个简单的技巧是一个"不需要动脑筋的"优化.

请参阅相关问题:Is there another way of testing if a big.Int is 0?

Go相关问答推荐

VS代码,Golang格式顽固的情况与switch / case

Go协议缓冲区导入问题

验证访问令牌(密钥罩)

重新赋值变量时未清除动态类型-这是错误吗?

如何在链接中写入链接

如何绕过深层 xml,没有嵌套循环?

在 Go 中将元数据从一个 JPEG 复制到另一个

如何使用 sync.WaitGroup 来执行所有的 goroutine?

从 eBPF LRU 哈希映射中错误驱逐的元素

如何以干净的方式在中间件中注入 repo 或服务?

Go Colly 如何找到请求的元素?

拆分文本并按空格获取字符串数组,如果文本长度超过 500,则获取字符串数组

Go:从 ssl 证书中获取 'subject/unstructeredName' 的值

合并几千万文件最快的方法是什么

出于某种原因,Golang (Go) AES CBC 密文被填充了 16 个 0x00 字节

如何在 Go 中使用 Pact 返回错误请求(400、500)?

从 map 返回空数组而不是空字符串数组

Golang 泛型同时具有接口和实现

如何访问Go 1.18泛型 struct (structs)中的共享字段

如果在调用 http.Get(url) 时发生错误,我们是否需要关闭响应对象?