Мне нужно преобразовать карту структуры в фрагмент структуры в Golang, то есть от источника к целевой структуре, указанной ниже.
// Source
var source map[string]Category
type Category struct {
A int
SubCategory map[string]SubCategory
}
type SubCategory struct {
B int
C string
}
// Target
var target []OldCategory
type OldCategory struct {
OldA int `mapstructure:"A"`
OldSubCategory []OldSubCategory
}
type OldSubCategory struct {
OldB int `mapstructure:"B"`
OldC string `mapstructure:"C"`
}
Я имею в виду пакет mapstrucuture ("github.com/ mitchellh / mapstructure "). Один из способов преобразования из источника в цель - выполнить итерацию по всей подкатегории, а затем по категории в исходном экземпляре и использовать mapstructure.Decode () для преобразования каждого из них по отдельности.
Существует ли прямой способ использования пакета mapstrucuture, в котором Я создаю пользовательский хук декодера, используя NewDecoder и DecoderConfig.DecodeHook, и всякий раз, когда я сталкиваюсь с источником как картой структуры и целевым объектом как фрагмент структуры, я обрабатываю его в функции DecodeHookFun c.
Соответствующая документация структуры карты https://godoc.org/github.com/mitchellh/mapstructure#NewDecoder