我有一个对象列表(准确地说是 olievere/Elastic SearchResult.Hits)。其中每一个都有一个json.RawMessage对象,我希望创建一个可抽象的方法,该方法接受任何结构的接口切片,Unmarshal 将每个单独的命中“json.RawMessage放入所述结构中,并将其附加到传入的[]interface.
这个 func 不应该对所需的业务层结构有任何逻辑或洞察力,而且 DB Call 的接口非常多,因此无法看到上面提到的 Elastic 包。我试图做的例子......
foo.go
import (bar, package)
type TestStruct struct {
Slice []*package.Struct // package.Struct has a value of Source which is a
// json.RawMessage
}
func GetData() bar.Test {
return &TestStruct{*package.GetData()}
}
func (result TestStruct) UnmarshalStruct(v []interface{}) {
for _, singleStruct := range result.Slice {
append(json.Unmarshal(singleStruct, &v))
}
第二个文件
bar.go
type Handler interface {
GetData() Test
}
type Test interface {
UnmarshalStruct
}
type OtherType struct {
foo string
bar string
}
func RetrieveData() []OtherType {
handler := New(Handler)
test := handler.GetData()
var typeSlice []OtherType
test.UnmarshalStruct(&typeSlice)
}
我正在寻找某种类型的东西[]OtherType,或者我决定创建的任何其他新结构UnmarshalStruct,并让它返回给我相同的结构,只是充满数据
例如,我要从 Elastic 搜索两种不同类型的数据。我将收到以下两个对象之一的列表。
{ 'foo': '',
'id':
}
并且在不同的索引中
{ 'bar': '',
'baz': '',
'eee': ''
}
这些中的每一个自然需要两个不同的结构。
但是,我希望有一种方法能够解码这些列表中的任何一个。我将在下面给出,并使用相同的函数将其转换为bar结构,并将其他类型转换为foo结构。
{ 'source': [
{ 'bar': '',
'baz': '',
'eee': ''
},
{ 'bar': '',
'baz': '',
'eee': ''
},
{ 'bar': '',
'baz': '',
'eee': ''
}
]
}
胡说叔叔
阿晨1998
相关分类