对无类型空白标识符的这种分配有什么影响?

我在中找到了以下代码crypto/sha256/sha256.go:


func putUint32(x []byte, s uint32) {

    _ = x[3]

    x[0] = byte(s >> 24)

    x[1] = byte(s >> 16)

    x[2] = byte(s >> 8)

    x[3] = byte(s)

}

len(x)我所看到的是,如果不是至少 4,对空白标识符的这种分配会造成恐慌,这甚至不是分配的影响,而是对 的评估的影响x[3]。那么,下面的(更短、更理想的代码)不是等效的吗?


func putUint32(x []byte, s uint32) {

    x[3] = byte(s)

    x[2] = byte(s >> 8)

    x[1] = byte(s >> 16)

    x[0] = byte(s >> 24)

}

如果是的话,为什么不这样写呢?


慕容森
浏览 105回答 1
1回答

忽然笑

赋值_ =本身不执行任何操作,但分配给它的索引表达式用于在许多其他较低索引操作之前访问切片中所需的最后一个元素。这是一种优化,旨在向编译器提示该值上的所有较低索引操作都是安全的,并且可以省略边界检查。这通常称为“边界检查消除”不使用后一个示例的主要原因是第二次优化,需要按顺序读取字节,以便编译器可以将它们合并为多字节加载。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go