👣 Почему теряются поля при конвертации?



▶️Итак, есть такая структура ответа map:

map[

/dbus-service:map[

org.freedesktop.DBus.Introspectable:map[]

org.freedesktop.DBus.Peer:map[]

org.freedesktop.DBus.Properties:map[]

Basket:map[

Fruit:"Apple"

]

]




При конвертации в json значение поле Fruit "теряется":

"/dbus-service":{

"org.freedesktop.DBus.Introspectable":{},

"org.freedesktop.DBus.Peer":{},

"org.freedesktop.DBus.Properties":{},

"Basket":

{

"Fruit":{}

}

}




Для вывода используется это:

fmt.Printf("%v", data)



jsonData, _ := json.Marshal(data)

fmt.Printf("json data: %s", jsonData)




Вопрос на засыпку: почему так происходит с Fruit?





▶️Ответ: этой ситуации данные не пропадают. Они не Marshal'aлятся у Fruit:"Apple".

"Apple" — имеет тип данных dbus.Variant

У него нету "публичных" свойств. Неэкспортируемых.



Экспортируемые пишутся с большой буквы.

Неэкспортируемые с маленькой.



Решение: создавать новое дерево map'ов с примитивными данными (string вместо dbus.Variant) путем рекурсии.



@golang_interview