【问题标题】:why cannot I assign a newly allocated byte array to a variable with []byte as type?为什么我不能将新分配的字节数组分配给以 []byte 为类型的变量?
【发布时间】:2014-06-28 01:12:10
【问题描述】:

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

var buf []byte
buf = new([256]byte)

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

cannot use *new([256]byte) (type [256]byte) as type []byte in assignment

有什么想法吗?

【问题讨论】:

    标签: arrays memory-management types go allocation


    【解决方案1】:

    您也可以像这样将新分配的数组用作切片:

    var slice []byte = buf[:]
    

    这会将切片创建为由数组 buf 支持的切片。

    【讨论】:

      【解决方案2】:

      您想将一个数组分配给一个切片,这是行不通的(请参阅“Go Slices: usage and internals”)

      要改为切片,请使用:

      var buf []byte
      buf = make([]byte, 256)
      

      区别:

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

      对比:

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


      如果你想创建一个数组(将它分配给一个数组),那就是:

      var buf [256]byte
      buf = [256]byte{}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-09
        • 2014-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多