Я слежу за Golang Decoding Generic JSON Objects to One of Many Formats как способ развязать общий json. У меня будет множество разных типов, которые могут быть добавлены другими, поэтому заявления о случаях жесткого кодирования невозможны.unmarshalling generic json с карточкой типа поиска
Я также не хочу жестко задавать тип как строку, но пусть те, кто использует библиотеку, выбрали имя «lookup», если они захотят переименовать свои базовые структуры позже.
Я в основном ищу что-то вроде этого:
type myInterface interface {
Something() // irrelevant, just to show you It's not about interface{}
}
type myBar struct {} // fulfils myInterface
type mySomething struct {} // fulfils myInterface
var types = make(map[string]type) // <--- Obvious Pseudo code ;)
types["foo:bar"] = myBar // done by whoever uses the library
types["1230988"] = mySomething // ...
type storageWrapper struct {
Type string
Data json.RawMessage
}
func loadSomething(id string) myInterface {
buf := db.load(id) // pseudo code but you get the idea
sw := &storageWrapper{}
json.Unmarshal(buf, sw)
// now the interesting part
targetType := types[sw.Type]
thing := &targetType{}
json.Unmarshal(sw.Data, thing)
return thing
}
я это чувство, что я overthinking всей проблемы. Или что я пытаюсь сгибаться. Входите во что-то, что противоречит его основополагающей философии. Я очень открыт и благодарен за любой совет, который предлагает другой подход ко всей проблеме.
Принимая это как ответ, потому что он выполняет свою работу. Тем не менее, я изменил свой код до сих пор, поэтому он больше не полагается на карту типов – paukul