因此,我正在創建一個 CLI 應用程序,某些命令需要訪問數據庫。現在他們最終都擁有了以下代碼: db, err := gorm.Open(sqlite.Open(fmt.Sprintf("%s/db/db.sqlite", dir)), &gorm.Config{}) if err != nil { panic("failed to connect database") }這打破了DRY的原則(不要重復自己)。有沒有辦法避免這種情況?
1 回答

紫衣仙女
TA貢獻1839條經驗 獲得超15個贊
我認為這大致是@Flimzy在談論依賴注入時所想到的(如果我錯了,請告訴我!
此處提供了整個自包含的示例。該結構具有指向其中的數據庫的指針。結構上的任何方法都可以訪問此打開的數據庫。Commands
type Commands struct {
db *gorm.DB
}
// An example command
func (c Commands) FindByUUID() (m []MyModel, err error) {
// The commands now have access to the database
c.db.Find(&m, "tag = ?", "foobar")
return m, c.db.Error
}
或者將其作為顯式參數傳遞:
func FindByUUID(db *gorm.DB) (m []MyModel, err error) {
db.Find(&m, "tag = ?", "foobar")
return m, db.Error
}
- 1 回答
- 0 關注
- 104 瀏覽
添加回答
舉報
0/150
提交
取消