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的切片。这是一个很小的优化,可以为需要从字符串+具有字符串长度的第一个字节创建字节数组的片分配所有内存。