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