我有一個對象列表(olievere/Elastic SearchResult.Hits是確切的)。其中每一個都有一個json.RawMessage
對象,我正在創建一個可抽象的方法,它接受任何結構的接口片,Unmarshal的每個人將'json.RawMessage
'命中到所述結構中,並將其附加到傳入的[]interface
中。Golang抽象接口切片轉換
這個func不應該有任何邏輯或洞察所需的業務層結構,並且數據庫調用接口相當繁重,因此無法查看上述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': ''
}
]
}
我沒有看到一個問題。您是否遇到以下問題:https://golang.org/doc/faq#convert_slice_of_interface? – JimB 2015-04-01 20:26:10
是的,請給出關於您遇到的問題的更多細節。 – robbrit 2015-04-01 20:37:57
以粗體更新。我正在尋找將類型[] OtherType或任何其他我決定創建的新結構移交給UnmarshalStruct,並讓它返回給我那個相同的結構,只是充滿了數據 – user2402831 2015-04-01 20:52:00