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

时间:2015-02-10 07:01:17

标签: arrays random go cryptography

我想将随机值读入字节数组。它的工作原理如下:

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

如何在rand.Read中使用[20]字节?

2 个答案:

答案 0 :(得分:5)

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

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

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

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

答案 1 :(得分:2)

您可以对其进行切片(see playground):

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

Go Slices: usage and internals中所述:

  

切片表达式的起始和结束索引是可选的;它们分别默认为零和切片的长度。