2015-05-13 80 views
0

我在我的项目中使用GORM,我想创建类似DB管理页面的东西。GORM Golang如何优化此代码

要加载记录我发送使用参数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在其他功能来保存它。

回答

0

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

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

+0

嘿@smnpl,你有没有例子如何做到这一点? (我的意思是通用的接口和映射)我创建的接口,但所有的值都是指针,gorm需要实例。我无法将实例分配为映射值(类型错误)。 – rtm7777