在处理已知长度为32个字节的sha256
哈希之类的东西时,使用[]byte
切片或[32]byte
数组是否更惯用?
我是一个新手,但是直觉上感觉像在使用[32]byte
数组存储哈希值时是很好的和明确的,实际上操作起来很麻烦并且需要各种奇怪的东西,例如将数组复制到新的缓冲区片中,以像[]byte
一样操作。
答案 0 :(得分:1)
切片是Go中的第一类,根据与标准库中数组的比较使用情况,切片似乎是首选方法。
将数组转换为切片也很困难:
package main
import (
"fmt"
)
func main() {
array := [5]int{1, 2, 3, 4, 5}
slice := array[:]
fmt.Println("Hello, playground", array, slice)
}
答案 1 :(得分:1)
看一下Go标准库,看起来数组经常用于已知长度的哈希。例如sha256.Sum256返回一个[sha256.Size]byte
,其中sha256.Size
是32。或者查看在hash.Hash
中实现sha256
接口的digest
结构,它包含{ {1}},其中[chunk]byte
为64,即sha256块大小。
我认为通常使用数组来避免不必要的内存分配。要利用对可变长度切片进行运算的算法,您可以将数组转换为切片,而无需使用chunk
复制。
x[:]