当前位置: 首页 > 面试题库 >

Golang数据库管理器api概念,类型声明错误

苏涛
2023-03-14
问题内容

创建用于通过API获取数据的数据库管理器API的基本概念。我正在使用GORM来获取strcut实例的数据。因此,代表表的结构为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
}

之后是一个操作结构,其中唯一的一个字段是DB。有一些方法,例如我要使用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,with不是golang类型。


问题答案:

基本上,我解决了将模型作为指针并在将其作为json文件返回后的问题。

所以我的模型如下:

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

然后按表类型返回一个新模型。我可以用于gorm First()函数。然后json将其编组,然后返回。

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


 类似资料:
  • 变量可以处理不同类型的值,称为数据类型。基本的类型是数和字符串,我们已经讨论过它们了。在后面的章节里面,我们会研究怎么用类创造我们自己的类型。

  • 在 redux-saga 的世界里,Sagas 都用 Generator 函数实现。我们从 Generator 里 yield 纯 JavaScript 对象以表达 Saga 逻辑。 我们称呼那些对象为 Effect。Effect 是一个简单的对象,这个对象包含了一些给 middleware 解释执行的信息。 你可以把 Effect 看作是发送给 middleware 的指令以执行某些操作(调用某

  • 在 Rust 中,任何值都属于一种明确的 类型(type),这告诉了 Rust 它被指定为何种数据,以便明确其处理方式。本部分我们将看到一系列内建于语言中的类型。我们将其分为两类:标量(scalar)和复合(compound)。 Rust 是 静态类型(statically typed)语言,也就是说在编译时就必须知道所有变量的类型,这一点将贯穿整个章节。通过值的形式及其使用方式,编译器通常可以推

  • 概述:概述Istio中的流量管理及其功能。 Pilot:引入Pilot,负责在服务网格中管理Envoy代理的分布式部署的组件。 请求路由:描述在Istio服务网格中服务之间如何路由请求。 发现和负载均衡:描述在网格中的服务实例之间的流量如何负载均衡。 处理故障: Envoy中的故障恢复功能概述,可以被未经修改的应用程序来利用,以提高鲁棒性并防止级联故障。 故障注入: 介绍系统故障注入的概念,可用于

  • 1.5.1. 什么是MaxDB? 1.5.2. MaxDB的历史 1.5.3. MaxDB的特性 1.5.4. 许可和支持 1.5.5. MaxDB和MySQL之间的特性差异 1.5.6. MaxDB和MySQL之间的协同性 1.5.7. 与MaxDB有关的链接 MaxDB是一种大型高效的企业数据库。数据库管理通过了SAP认证。 MaxDB是数据库管理系统的新名称,以前称为SAP DB。2003年

  • 1.4.1. MySQL的历史 1.4.2. MySQL的的主要特性 1.4.3. MySQL稳定性 1.4.4. MySQL表最大能达到多少 1.4.5. 2000年兼容性 MySQL是最流行的开放源码SQL数据库管理系统,它是由MySQL AB公司开发、发布并支持的。MySQL AB是由多名MySQL开发人创办的一家商业公司。它是一家第二代开放源码公司,结合了开放源码价值取向、方法和成功的商业