У меня есть список объектов (olievere/Elastic SearchResult.Hits, если быть точным). Каждый из них имеет объект json.RawMessage
, и я ищу для создания абстрактного метода, который принимает срединный срез любой структуры, каждый отдельный клик Unmarshal 'json.RawMessage
в указанную структуру и добавляет его к переданному в []interface
.Golang abstracted Interface Slice conversion
Этот функционал не должен иметь никакой логики или понимания желаемой структуры бизнес-уровня, а вызов БД сопряжен довольно тяжело и, как таковой, не имеет видимости в упомянутом выше пакете 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
Да, просьба дать более подробную информацию о проблеме, которую вы испытываете. – robbrit
Обновлено жирным шрифтом. Я ищу, чтобы передать что-то типа [] OtherType или любую другую новую структуру, которую я решил создать, для UnmarshalStruct, и вернуть мне эту ту же структуру, просто заполненную данными – user2402831