登录
首页 >  Golang >  Go问答

Golang 数据库管理器 api 概念,类型断言错误

来源:Golang技术栈

时间:2023-04-29 17:58:16 355浏览 收藏

对于一个Golang开发者来说,牢固扎实的基础是十分重要的,golang学习网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《Golang 数据库管理器 api 概念,类型断言错误》,主要介绍了golang,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了!

问题内容

创建用于通过 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)
}

有积分所以这是我不知道的。当前的解决方案不起作用,因为在这种情况下它是一个接口{} 我需要[在这个问题中进行类型断言更多信息](https://stackoverflow.com/questions/42039827/difference- between-golang-pointers)。类型断言如下所示:

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,with 不是 golang 类型。

正确答案

基本上我解决了这个问题,将模型作为指针,然后将它作为 json 文件返回。

所以我的模型如下:

var Models = map[string]interface{}{
    "users": new(Users),
    "categories": new(Categories),
}

它按表类型返回一个新模型。我可以为 gorm First() 函数使用什么。然后 json Marshal 它,并返回。

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)
}

在返回之前,我清除了模型指针,因为 First() 函数存储了最新查询的回调。

func clear(v interface{}) {
    p := reflect.ValueOf(v).Elem()
    p.Set(reflect.Zero(p.Type()))
}

本篇关于《Golang 数据库管理器 api 概念,类型断言错误》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表