Go 向接口数组追加具体值

Go 向接口数组追加具体值,go,Go,我有以下结构: type Type interface { getFoo() []byte } type Concrete struct { } func (this *Concrete) getFoo() []byte { example := []byte{2, 3, 4} return example } 现在我有了一些类型接口数组,例如: var arr[]*类型 我想创建混凝土结构的数组,并用它初始化上面的数组,例如: var cObjArr []*Concret

我有以下结构:

type Type interface {
  getFoo() []byte
}

type Concrete struct {
}

func (this *Concrete) getFoo() []byte {
   example := []byte{2, 3, 4}
   return example
}
现在我有了一些
类型
接口数组,例如:

var arr[]*类型

我想创建混凝土结构的数组,并用它初始化上面的数组,例如:

var cObjArr []*Concrete
cObj := new(Concrete)
cObjArr = append(cObjArr, cObj)
arr = cObj

但是它给了我一个错误,
不能在赋值中使用类型[]*具体作为类型[]*类型
。怎么了?

首先,您应该将
arr
声明为
[]类型
,而不是
[]*类型
。要放入数组的对象是
类型
,而不是
*类型
*具体
实现
类型
接口)


根据错误,您的代码必须尝试执行
arr=cObjArr
。不能这样做,因为两个切片对象的类型不同。相反,您可以将
cObj
直接附加到
arr

首先,您应该将
arr
声明为
[]类型
而不是
[]*类型
。要放入数组的对象是
类型
,而不是
*类型
*具体
实现
类型
接口)


根据错误,您的代码必须尝试执行
arr=cObjArr
。不能这样做,因为两个切片对象的类型不同。相反,您可以将
cObj
直接附加到
arr

这里有一些问题

首先,

type Type interface{} {
  getFoo() []byte
}
应该是

type Type interface {
  getFoo() []byte
}
我假设这是试图展示一个小的、可复制的例子的结果

其次是
arr
应该是类型
type
的一个片段,而不是
*type
。指向接口的指针很少是您真正的意思

因此,您的
arr
现在是
类型的一部分<代码>[]键入
。对于当前范围的其余部分,
arr
必须始终为
[]类型

cObjArr
属于
[]*混凝土类型。这很好,但是
cObjArr
的值不能分配给
arr
,因为它是不同的类型

你有几个选择

  • 不要附加到
    cObjArr
    ,只需附加到
    arr
  • 或者遍历
    cObjArr
    并附加到
    arr

  • 这里有一些问题

    首先,

    type Type interface{} {
      getFoo() []byte
    }
    
    应该是

    type Type interface {
      getFoo() []byte
    }
    
    我假设这是试图展示一个小的、可复制的例子的结果

    其次是
    arr
    应该是类型
    type
    的一个片段,而不是
    *type
    。指向接口的指针很少是您真正的意思

    因此,您的
    arr
    现在是
    类型的一部分<代码>[]键入
    。对于当前范围的其余部分,
    arr
    必须始终为
    []类型

    cObjArr
    属于
    []*混凝土类型。这很好,但是
    cObjArr
    的值不能分配给
    arr
    ,因为它是不同的类型

    你有几个选择

  • 不要附加到
    cObjArr
    ,只需附加到
    arr
  • 或者遍历
    cObjArr
    并附加到
    arr