Golang 数据库管理器 api 概念,类型断言错误
Golang database manager api concept, error with type assertion
创建数据库管理器 API 以通过 API 获取数据的基本概念。我正在使用 GORM 获取 strcuts 实例的数据。所以有 300-400 结构代表 tables。
type Users struct {
ID int64
Name string
}
type Categories struct {
ID int64
Category string
}
下一步我实现一个函数,它是 return 结构的正确实例 table 名称,我通过 API 端点参数得到的。
func GetModel(model string) interface{} {
switch model {
case "users":
return Users{}
case "categories"
return Categories{}
}
return false
}
之后是一个操作结构,其中唯一的一个字段是数据库。有一些方法,例如我想在其中使用 GORM db.Last(&users) 函数的 GetLast() 。
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)
,但它也不起作用,因为 reflect.TypeOf 的结果是 reflect.Type,不是 golang 类型。
基本上我解决了这个问题,将模型作为指针获取,然后 return 它作为 json 文件返回。
所以我的模型如下:
var Models = map[string]interface{}{
"users": new(Users),
"categories": new(Categories),
}
并且是return背一个新型号table类型。我可以为 gorm First() 函数使用什么。然后 json 编组它,然后 return.
func (o Operation) First(model string, query url.Values) string {
modelStruct := Models[model]
db := o.DB
db.First(modelStruct)
response, _ := json.Marshal(modelStruct)
clear(modelStruct)
return string(response)
}
在 return 之前,我清除了模型指针,因为 First() 函数存储了最新查询的回调。
func clear(v interface{}) {
p := reflect.ValueOf(v).Elem()
p.Set(reflect.Zero(p.Type()))
}
创建数据库管理器 API 以通过 API 获取数据的基本概念。我正在使用 GORM 获取 strcuts 实例的数据。所以有 300-400 结构代表 tables。
type Users struct {
ID int64
Name string
}
type Categories struct {
ID int64
Category string
}
下一步我实现一个函数,它是 return 结构的正确实例 table 名称,我通过 API 端点参数得到的。
func GetModel(model string) interface{} {
switch model {
case "users":
return Users{}
case "categories"
return Categories{}
}
return false
}
之后是一个操作结构,其中唯一的一个字段是数据库。有一些方法,例如我想在其中使用 GORM db.Last(&users) 函数的 GetLast() 。
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)
,但它也不起作用,因为 reflect.TypeOf 的结果是 reflect.Type,不是 golang 类型。
基本上我解决了这个问题,将模型作为指针获取,然后 return 它作为 json 文件返回。
所以我的模型如下:
var Models = map[string]interface{}{
"users": new(Users),
"categories": new(Categories),
}
并且是return背一个新型号table类型。我可以为 gorm First() 函数使用什么。然后 json 编组它,然后 return.
func (o Operation) First(model string, query url.Values) string {
modelStruct := Models[model]
db := o.DB
db.First(modelStruct)
response, _ := json.Marshal(modelStruct)
clear(modelStruct)
return string(response)
}
在 return 之前,我清除了模型指针,因为 First() 函数存储了最新查询的回调。
func clear(v interface{}) {
p := reflect.ValueOf(v).Elem()
p.Set(reflect.Zero(p.Type()))
}