我使用gorm包(https://github.com/jinzhu/gorm)作爲我在golang的數據庫庫。我有很多類(數據庫表),如「酒店」或「包」。重複的代碼不是很好的編程習慣。作爲一個愚蠢的例子 - 讓我們假設我想從每個表中獲取第一個對象。我可以爲每個對象編寫此方法(,GetFirstPackage
...)。但更好的辦法是隻有一個方法GetFirstItem
,我將使用第一個參數創建與參數相同的類的對象,然後將其傳遞給gorm,它將填充數據庫中的數據,然後將其返回爲interface{}
。我試圖用反映,但失敗了,因爲我可能不太瞭解它。Go反映與格姆庫
也許我只是沒有在gorm庫中發現一些功能,或者我不能正確使用反射包。我應該如何實現GetFirstItem
函數。是否有可能實現這一點,還是應該重複我的代碼?
package main
import (
"github.com/jinzhu/gorm"
)
var db gorm.DB
type Hotel struct {
ID int64
Name string
Lat float64
Lon float64
}
type Package struct {
ID int64
Name string
Text string
}
func GetFirstHotel() (hotel Hotel) {
db.First(&hotel)
}
func GetFirstPackage() (pack Package) {
db.First(&pack)
}
func main() {
var firstHotel, firstPackage interface{}
//first method
firstHotel = GetFirstHotel()
firstPackage = GetFirstPackage()
//method i want to use
firstHotel = GetFirstItem(Hotel{})
firstPackage = GetFirstItem(Package{})
}
func GetFirstItem(item interface{}) interface{} {
//how to implement this?
//probably with some use of reflect package
}