Базовая концепция создания API диспетчера баз данных для получения данных через API. Я использую GORM для получения данных об экземплярах strcuts. Итак, есть структура 300-400, которая представляет таблицы.
type Users struct {
ID int64
Name string
}
type Categories struct {
ID int64
Category string
}
На следующем шаге я реализую функцию, которая возвращает правильный экземпляр структуры по имени таблицы, что я получаю через параметр конечной точки API.
func GetModel(model string) interface{} {
switch model {
case "users":
return Users{}
case "categories"
return Categories{}
}
return false
}
После идет структура операций, в которой единственным полем является БД. Есть методы, например GetLast (), где я хочу использовать функцию GORM db.Last (& users).
func (o Operations) GetLast(model string) interface{} {
modelStruct := GetModel(model)
.
.
.
return o.DB.Last(&modelStruct)
}
Есть точки, так что это то, чего я не знаю. Текущее решение не работает, потому что в данном случае это интерфейс. {} Мне нужно сделать утверждение типа подробнее в этом вопросе. Утверждение типа выглядит так:
func (o Operations) GetLast(model string) interface{} {
modelStruct := GetModel(model)
.
test := modelStruct.(Users)
.
return o.DB.Last(&test)
}
Это решение работает, но в этом случае я потерял модульность. Я пытаюсь использовать reflect.TypeOf(modelStruct)
, но он также не работает, потому что результат рефлексии. ТипOf - рефлекс. Тип с не является типом голанга.