为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
人到中年有点甜 2023-05-08 17:40:56
在处理诸如sha256已知长度为 32 字节的散列之类的东西时——使用[]byte切片或[32]byte数组更符合习惯吗?我有点新手——但直觉上感觉使用[32]byte数组存储散列很好而且明确,但实际上操作起来很麻烦,需要各种奇怪的事情,比如将数组复制到新的缓冲区切片中操纵为[]byte.
查看完整描述

2 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

查看 Go 标准库,数组似乎经常用于已知长度的散列之类的东西。例如sha256.Sum256返回一个[sha256.Size]bytewhere sha256.Sizeis 32。或者查看digest实现hash.Hash接口的结构,其中sha256包含[chunk]bytewhere chunkis 64,即 sha256 块大小。

我认为通常使用数组来避免不必要的内存分配。要利用对可变长度切片进行操作的算法,您可以将数组转换为切片而无需使用x[:].

package main


import (

    "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[:])

}


查看完整回答
反对 回复 2023-05-08
?
炎炎设计

TA贡献1808条经验 获得超4个赞

切片在 Go 中是一流的,并且根据它们与标准库中数组的比较用法,它似乎是首选方式。


将数组转换为切片也很简单:


package main


import (

    "fmt"

)


func main() {

    array := [5]int{1, 2, 3, 4, 5}

    slice := array[:]

    fmt.Println("Hello, playground", array, slice)

}


查看完整回答
反对 回复 2023-05-08
  • 2 回答
  • 0 关注
  • 122 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信