切片vs数组用于已知长度的数据

时间:2018-11-18 03:10:04

标签: arrays go slice

在处理已知长度为32个字节的sha256哈希之类的东西时,使用[]byte切片或[32]byte数组是否更惯用?

我是一个新手,但是直觉上感觉像在使用[32]byte数组存储哈希值时是很好的和明确的,实际上操作起来很麻烦并且需要各种奇怪的东西,例如将数组复制到新的缓冲区片中,以像[]byte一样操作。

2 个答案:

答案 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[:]