2015-05-13 109 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