为什么我不能将新分配的字节数组分配给[] byte作为类型的变量?

fst*_*tab 1 arrays types memory-management allocation go

我试图声明一个具有未指定大小的类型数组的变量,[]byte然后用分配的大小数组填充它,256如下所示:

var buf []byte
buf = new([256]byte)
Run Code Online (Sandbox Code Playgroud)

不幸的是,它不起作用.返回的编译错误如下:

cannot use *new([256]byte) (type [256]byte) as type []byte in assignment
Run Code Online (Sandbox Code Playgroud)

任何的想法?

Von*_*onC 6

您想要将一个数组分配给切片,这将无法工作(请参阅" 切片:使用和内部 ")

要改为切片,请使用:

var buf []byte
buf = make([]byte, 256)
Run Code Online (Sandbox Code Playgroud)

区别:

数组变量表示整个数组; 它不是指向第一个数组元素的指针(如C中的情况).
这意味着当您分配或传递数组值时,您将复制其内容.(为了避免复制,你可以传递一个指向数组的指针,但那是一个指向数组的指针,而不是一个数组.)
一种思考数组的方法是作为一种结构,但有索引而不是命名字段:一个固定的-size复合值.

与:

切片是数组段的描述符.
它由指向数组的指针,段的长度及其容量(段的最大长度)组成.


如果要创建一个数组(将其分配给数组),那将是:

var buf [256]byte
buf = [256]byte{}
Run Code Online (Sandbox Code Playgroud)