当前位置: 首页 > 面试题库 >

在Go中将数组转换为切片

锺离正祥
2023-03-14
问题内容

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

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

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

然后,我需要将该结果传递给其他函数以进行进一步处理。

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

不幸的是,如果我尝试致电

d := Foo()
Bar(d)

我懂了

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

在做

[]byte(d)

好多了。我该怎么做,尤其是在不创建数据副本的情况下(当我正在做的事情是传递数据时,似乎很愚蠢地复制该数据)。


问题答案:

这应该工作:

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

而且它不会创建基础缓冲区的副本



 类似资料:
  • 问题内容: 目前,我这样做是为了将CGO的double数组转换为float64的一部分: 是否有一种不太麻烦的方式来做相同的事情?我想这也可以看作是Go中不同类型的切片/数组之间进行转换的一种通用方法。 问题答案: 您具有执行此操作的正常和安全的方法: 或者,您可以不方便地作弊并执行以下操作: 如果和是相同的基础类型,我们可以使用指向C.double数组的指针,不安全地将其强制转换为相同大小的fl

  • 问题内容: 我是Go的新手,正在尝试编写一个读取RPM文件的应用程序。每个块的开头都有的魔术字符。 这是我的结构 我正在尝试执行以下操作: 我在网上搜索,不确定如何从切片到数组(不进行复制)。我总是可以制作魔术(甚至是),但我对如何从类型转换为更好奇? 问题答案: 内置方法 copy 只会将一个切片复制到一个切片,而不是将切片复制到一个数组。 您必须欺骗 复制 以将数组视为切片 或使用for循环进

  • 问题内容: 如何在Go中将float64转换为int?我知道该包可用于在字符串之间进行任何转换,但不能用于不是字符串的数据类型之间的转换。我知道我可以使用将任何内容转换为字符串,然后转换为所需的数据类型的方法,但是这种额外的转换似乎有些笨拙- 是否有更好的方法来做到这一点? 问题答案:

  • 问题内容: 我是Java编程的新手。我的问题是,我有一个数组,但是当我尝试将其转换为数组时,我不断 我的代码是 任何帮助将是极大的感谢!!! 问题答案: 要摆脱其他空格,您可以像这样更改代码:

  • 问题内容: 概述Java程序如何将诸如“ 1,2,3,4,5”之类的字符串转换为数组({1,2,3,4,5}) 问题答案: 从zvzdhk: 然后,解析您的整数:

  • 问题内容: 我有一个包含几个整数的数组。我已经向数组添加了一些值,但是现在我需要通过jQuery的方法将此数组发送到页面。如何将其转换为JSON对象进行发送? 问题答案: 向后兼容的脚本:https : //github.com/douglascrockford/JSON- js/blob/master/json2.js 并致电: 注意: JSON对象现在是大多数现代Web浏览器(IE 8及更高版