在 Go 中将数组转换为切片

这似乎是这将是整个interwebs一个相当普遍的事情,丰富的实例,但我似乎无法找到如何将一个转换的例子[32]byte来[]byte。


我有一个从外部库调用的函数,该函数返回一个数组


func Foo() [32]byte {...}

然后我需要将该结果传递给不同的函数以进行进一步处理。


func Bar(b []byte) { ... }

不幸的是,如果我尝试打电话


d := Foo()

Bar(d)

我得到


cannot convert d (type [32]byte) to type []byte

正在做


[]byte(d)

并没有好多少。我该怎么做,特别是不创建数据副本(当我所做的只是传递数据时复制这些数据似乎很愚蠢)。


叮当猫咪
浏览 735回答 3
3回答

白猪掌柜的

arr[:]  // arr is an array; arr[:] is the slice of all elements

呼唤远方

这将解决问题:slice := array[0:len(array)]还避免复制底层缓冲区。

HUH函数

这应该有效:func Foo() [32]byte {    return [32]byte{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}}func Bar(b []byte) {    fmt.Println(string(b))}func main() {    x := Foo()    Bar(x[:])}它不会创建底层缓冲区的副本
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go