如何使用 [20]bytes 类型作为参数而不是 crypto.rand.Read 中的 []bytes?

How can I use [20]bytes type as parameter instead of []bytes in crypto.rand.Read?

我想将随机值读入字节数组。它是这样工作的:

hash = make([]byte,20)
_, err := rand.Read(hash)

但我想做类似的事情

var hash [20]byte
_, err := rand.Read(hash)

这导致

cannot use hash (type [20]byte) as type []byte in argument to "crypto/rand".Read

如何将 [20] 字节与 rand.Read 一起使用?

要创建一个由数组支持的切片,您可以编写例如hash[i:j](其中 returns 从索引 i 到索引 j-1 的切片)。在你的情况下,你可以写:

var hash [20]byte
_, err := rand.Read(hash[0:20])

或者,因为默认端点是 0 和数组长度:

var hash [20]byte
_, err := rand.Read(hash[:])

你可以切片 (see playground):

shash := hash[:]
rand.Read(shash)

Go Slices: usage and internals所述:

The start and end indices of a slice expression are optional; they default to zero and the slice's length respectively.