Я пытаюсь динамически создавать структуры на основе строки.
В приведенном ниже примере отражение. Типы & c и & c1 отличаются, потому что я возвращаю интерфейс {} из makeInstance.TypeOf c и c1 одинаковы.
Мой вопрос: как мне изменить способ обработки вывода makeInstance, чтобы он создавал объект, идентичный c1, но все равно позволял бы мне создавать объекты, идентичные b1?
type Car struct {
Make int `json:"make"`
Model int `json:"model"`
}
type Bus struct {
Seats int `json:"seats"`
Route int `json:"route"`
}
var typeRegistry = make(map[string]reflect.Type)
func init() {
typeRegistry["Car"] = reflect.TypeOf(Car{})
typeRegistry["Bus"] = reflect.TypeOf(Bus{})
}
func makeInstance(name string) interface{} {
v := reflect.New(typeRegistry[name]).Elem()
return v.Interface()
}
func main() {
c := makeInstance("Car")
b := makeInstance("Bus")
var b1 Bus
var c1 Car
fmt.Println(reflect.TypeOf(&c))
fmt.Println(reflect.TypeOf(&c1))
fmt.Println(reflect.TypeOf(c))
fmt.Println(reflect.TypeOf(c1))
Редактировать:
Мой общий результат - иметь программу, которая читает конфигурационный файл json, в котором будут перечислены типы объектов, которые я хочу отключить, и нажму на остальные API и соберу, например,
{
"auth":[{
"username": "admin",
"password": "admin"
}],
"transport":[
{
"vehicle":["car", "bus"]
}]
}
При прохождении через автомобиль он попадет в API, выполнит запрос и вернет данные.Затем я хотел бы создать массив всех транспортных средств, включенных в конфигурацию, и разархивировать в него ответ json.Я пытаюсь создавать объекты динамически, чтобы избежать проверки, если автомобиль = автомобиль, автомобиль = автобус и т. Д., Так как в конечном итоге у меня будет много типов транспортных средств, но может не всегда иметь все транспортные средства, и это кажется длинным.