【问题标题】:GORM Golang how to optimize this codeGORM Golang如何优化这段代码
【发布时间】:2015-05-13 07:38:26
【问题描述】:

我在我的项目中使用 GORM,我想创建类似 DB 管理页面的东西。

要加载记录,我发送带有参数的 GET:

category: "name", // database table name

在服务器上我有下一个代码:

func LoadItems(db *gorm.DB, category string) interface{} {
  var items interface{}

  loadItems := func(i interface{}) {
    err := db.Find(i).Error
    if err != nil {
      panic(err)
    }
    items = i
  }

  switch category {
  case "groups":
    var records []*models.Groups
    loadItems(&records)
  case "departments":
    var records []*models.Departments
    loadItems(&records)
  case .....
    ........
  }

  return items
}

是否可以替换switch,因为我有10个表,并且在记录编辑后我将新数据发送到服务器,我不得不在其他功能中使用switch来保存它。

【问题讨论】:

    标签: go go-gorm


    【解决方案1】:

    我不熟悉gorm,但是: 也许将“部门”(作为键)和相应模型类型的变量存储在映射中,然后通过键引用模型。如果还没有,那么模型必须实现一个通用接口才能将它们存储在一个地图中。 不过,如果这会是一个更好的解决方案,我不确定。可能更容易维护,因为只需将新模型类型添加到地图中,您不必在代码中的多个位置调整开关。

    另一种明显的方法是将开关外包给一个函数,返回一个通用接口类型的变量,并在代码的不同位置使用它。那肯定不会更快,但更容易维护。

    【讨论】:

    • 嘿@smnpl,你有例子吗? (我的意思是通用接口和映射)我创建了接口,但所有值都是指针,gorm 需要实例。我无法将实例分配为地图值(类型错误)。
    猜你喜欢
    • 1970-01-01
    • 2013-02-15
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多