Arrays 如何将字节数组附加到Go中的字节片
我有一个简单的代码,我试图理解,但我正在努力找出如何使它正常工作 一般的想法是我想传递一些数据,并将其转换成字节数组。然后我想在字节片的第一个索引处应用字节数组的长度,然后将字节数组添加到片的末尾 这就是它所尝试的:Arrays 如何将字节数组附加到Go中的字节片,arrays,go,slice,Arrays,Go,Slice,我有一个简单的代码,我试图理解,但我正在努力找出如何使它正常工作 一般的想法是我想传递一些数据,并将其转换成字节数组。然后我想在字节片的第一个索引处应用字节数组的长度,然后将字节数组添加到片的末尾 这就是它所尝试的: var slice []byte myString := "Hello there" stringAsByteArray := []byte(myString) //convert my string to byte array slice[0
var slice []byte
myString := "Hello there"
stringAsByteArray := []byte(myString) //convert my string to byte array
slice[0] = byte(len(stringAsByteArray)) //length of string as byte array
append(slice, stringAsByteArray)
因此,想法是切片的第一个字节包含len(b)
的编号,然后从这个字节开始,实际的字符串消息作为一系列字节
但我得到:
cannot use stringAsByteArray (type []byte) as type byte in append
append(slice, stringAsByteArray) evaluated but not used
比如说,
package main
import "fmt"
func main() {
myString := "Hello there"
slice := make([]byte, 1, 1+len(myString))
slice[0] = byte(len(myString))
slice = append(slice, myString...)
fmt.Println(slice[0], string(slice[1:]))
}
输出:
11 Hello there
首先,您需要使用make
函数初始化切片
要向切片添加数据,应使用append
函数
要将[]字节
中的元素添加到[]字节
中,可以在追加
调用中使用扩展运算符
最后,您需要使用调用append
函数的结果
编译器打印的错误消息中不清楚的是:字符串和[]字节是不同的类型,不能在append中混合使用。第二个更为根本。所有这些在围棋教程中的解释要比这里解释的好得多。我认为它是在附加一个字节数组,因为我把它转换成了一个字节数组。我的切片是字节而不是字符串。我不完全理解为什么它不能将字节数组附加到字节片上。“我不完全理解为什么它不能将字节数组附加到字节片上”。仅仅因为append
的工作原理通常是这样的append([]T,T)
:您不需要将一个片附加到一个片上,而是需要将一个或多个元素附加到一个片上。如果您想附加切片的每个元素,请使用…
,这在参考的ad中解释得很好。您的示例中没有数组,只有切片。请阅读。啊,那么我试图将字节数组附加到字节片是不符合逻辑的吗?我以为append会把这两个连接在一起。@Sir:看我修改过的答案。这不是把字符串的长度加在片段的末尾而不是开头吗?我一开始就想知道:)你是关于myString:=“你好”;slice:=make([]字节,0,len(myString)+1)
?这将创建长度为0且容量为len(string)+1的切片。这是一个很小的优化,可以为需要从字符串+具有字符串长度的第一个字节创建字节数组的片分配所有内存。