登录
首页 >  Golang >  Go问答

对于固定长度数据的切割与存储

来源:stackoverflow

时间:2024-02-28 19:39:23 176浏览 收藏

小伙伴们对Golang编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《对于固定长度数据的切割与存储》,就很适合你,本篇文章讲解的知识点主要包括。在之后的文章中也会多多分享相关知识点,希望对大家的知识积累有所帮助!

问题内容

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

我有点陌生 - 但直观上感觉就像使用 [32]byte 数组来存储哈希值很好且明确,它实际上操作起来相当麻烦,并且需要各种奇怪的东西,例如将数组复制到新的缓冲区片中以作为 []byte 进行操作。


解决方案


看看 go 标准库,看起来数组经常用于诸如已知长度的哈希之类的东西。例如 sha256.Sum256 返回一个 [sha256.size]byte,其中 sha256.Size 是 32。或者查看在 hash.hash 接口中实现 hash.hash 接口的 digest 结构,它包含 [chunk]byte ,其中 chunk 是 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[:])
}

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

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

package main

import (
    "fmt"
)

func main() {
    array := [5]int{1, 2, 3, 4, 5}
    slice := array[:]
    fmt.Println("Hello, playground", array, slice)
}

到这里,我们也就讲完了《对于固定长度数据的切割与存储》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>