Похоже, вы получаете данные результатов из Firebase с типом map[string]interface{}
, и вам необходимо преобразовать их в тип map[string]*Foo
(где Foo
- это некоторая структура, определенная в другом месте).
ЕслиFoo
struct можно легко де / сериализовать в некоторый промежуточный формат, тогда вы сможете сериализовать нетипизированные значения и затем десериализовать их в переменную нужного типа.
Например, используя JSON ( Go Playground ):
docdata := getDocData()
for label, data := range docdata {
// Marshal the untyped data into a suitable format.
bs, err := json.Marshal(data)
check(err)
// Unmarshal the formatted data into a variable with desired type.
var foo *Foo
err = json.Unmarshal(bs, &foo)
check(err)
fmt.Printf("OK: label=%q, foo=%#v\n", label, foo)
}
// OK: label="E01PCI", foo=(*main.Foo)(nil)
// OK: label="E06CPCI", foo=(*main.Foo)(nil)
// OK: label="DE03CABG", foo=&main.Foo{Name:"Alpha", SCOREGRAPHIC:"Bravo", SCORE:3.14159, INDICATION:true, SCOREDEFINITIONS:"Echo", Q01CAT:6, TermDescription:(*string)(nil)}
// OK: label="DE06CCABG", foo=&main.Foo{Name:"Hotel", SCOREGRAPHIC:"India", SCORE:10.1, INDICATION:true, SCOREDEFINITIONS:"Lima", Q01CAT:13, TermDescription:(*string)(0x1050c3d0)}
Из вашего вопроса неясно, являются ли данные в doc.Data()
всей упомянутой вами структурой или какой-либо другой вид структурированных данных, который включает в себя экземпляры вашей структуры (мой пример предполагает последнее);однако общая идея сериализации в промежуточный формат и десериализации в типизированную переменную должна работать в любом случае.