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

在 Go 中将数组转换为切片

在 Go 中将数组转换为切片

Go
叮当猫咪 2021-09-20 10:53:58
这似乎是这将是整个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)并没有好多少。我该怎么做,特别是不创建数据副本(当我所做的只是传递数据时复制这些数据似乎很愚蠢)。
查看完整描述

3 回答

?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

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


查看完整回答
反对 回复 2021-09-20
?
呼唤远方

TA贡献1856条经验 获得超11个赞

这将解决问题:

slice := array[0:len(array)]

还避免复制底层缓冲区。


查看完整回答
反对 回复 2021-09-20
?
HUH函数

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

这应该有效:


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

}

它不会创建底层缓冲区的副本


查看完整回答
反对 回复 2021-09-20
  • 3 回答
  • 0 关注
  • 731 浏览
慕课专栏
更多

添加回答

举报

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