【问题标题】:How can I use [20]bytes type as parameter instead of []bytes in crypto.rand.Read?如何在 crypto.rand.Read 中使用 [20]bytes 类型而不是 []bytes 作为参数?
【发布时间】:2015-02-10 07:01:16
【问题描述】:

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

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 一起使用?

【问题讨论】:

    标签: arrays random go cryptography


    【解决方案1】:

    要创建一个由数组支持的切片,您可以编写例如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[:])
    

    【讨论】:

      【解决方案2】:

      你可以切片(see playground):

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

      Go Slices: usage and internals中提到的:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-05
        • 2018-03-27
        • 1970-01-01
        • 2017-12-15
        • 1970-01-01
        • 2023-03-29
        • 2021-09-09
        • 1970-01-01
        相关资源
        最近更新 更多