猿问

已知长度数据的切片与数组

在处理诸如sha256已知长度为 32 字节的散列之类的东西时——使用[]byte切片或[32]byte数组更符合习惯吗?

我有点新手——但直觉上感觉使用[32]byte数组存储散列很好而且明确,但实际上操作起来很麻烦,需要各种奇怪的事情,比如将数组复制到新的缓冲区切片中操纵为[]byte.


人到中年有点甜
浏览 123回答 2
2回答

慕容森

查看 Go 标准库,数组似乎经常用于已知长度的散列之类的东西。例如sha256.Sum256返回一个[sha256.Size]bytewhere sha256.Sizeis 32。或者查看digest实现hash.Hash接口的结构,其中sha256包含[chunk]bytewhere chunkis 64,即 sha256 块大小。我认为通常使用数组来避免不必要的内存分配。要利用对可变长度切片进行操作的算法,您可以将数组转换为切片而无需使用x[:].package mainimport (    "crypto/sha256"    "fmt")type myHash struct {    x [32]byte}func print(b []byte) {    fmt.Print(b)}func main() {    b := []byte("Hello world!")    h := myHash{x: sha256.Sum256(b)}    print(h.x[:])}

炎炎设计

切片在 Go 中是一流的,并且根据它们与标准库中数组的比较用法,它似乎是首选方式。将数组转换为切片也很简单:package mainimport (    "fmt")func main() {    array := [5]int{1, 2, 3, 4, 5}    slice := array[:]    fmt.Println("Hello, playground", array, slice)}
随时随地看视频慕课网APP

相关分类

Go
我要回答