我有以下结构:
{
"query": {
"bool": {
"must": [
{
"query_string" : {
"query" : "query_term"
}
}
],
"must_not": [
{
"term" : {
"my_field" : "must_not_term"
}
},
{
"term" : {
"my_field" : "must_not_term2"
}
}
],
"filter": [
{
"term" : {
"my_field" : "must_term1"
}
},
{
"term" : {
"my_field" : "must_term2"
}
}
]
}
}
}
现在我有一些type Type interface {
getFoo() []byte
}
type Concrete struct {
}
func (this *Concrete) getFoo() []byte {
example := []byte{2, 3, 4}
return example
}
接口数组,例如:
Type
我想创建具体结构数组并用它初始化上面的数组,例如:
var arr []*Type
但它给了我var cObjArr []*Concrete
cObj := new(Concrete)
cObjArr = append(cObjArr, cObj)
arr = cObj
的错误。怎么了?
答案 0 :(得分:2)
这里有一些问题。
首先,
type Type interface{} {
getFoo() []byte
}
应该是
type Type interface {
getFoo() []byte
}
我认为这是试图展示一个小的,可重复的例子的结果。
接下来,arr
应该是Type
类型的切片,而不是*Type
。指向界面的指针很少是你真正的意思。
因此,您的arr
现在是Type
... []Type
的一部分。对于当前范围的剩余部分,arr
始终必须为[]Type
类型。
cObjArr
的类型为[]*Concrete
。这很好,但cObjArr
的值无法分配给arr
,因为它是一种不同的类型。
你有几个选择。
cObjArr
arr
醇>
https://play.golang.org/p/m3-83s6R5c
cObjArr
并附加到arr
答案 1 :(得分:0)
首先,您应将arr
声明为[]Type
而不是[]*Type
。您要放入数组的对象是Type
,而不是*Type
(*Concrete
实现Type
接口。)
根据错误,您的代码必须尝试arr = cObjArr
。您不能这样做,因为两个切片对象的类型不同。相反,您可以将cObj
直接附加到arr
。