2 回答
TA贡献1798条经验 获得超7个赞
gorm.Open在每个函数内部调用并不是很有效:Open打开一个新的连接池,并且应该只调用一次(请参阅gorm 包装的 database/sql 文档)。
一个简单的改进是建立一个全局gorm.DB,init() 从你的所有函数中初始化它- 例如
package database
var db gorm.DB
func init() {
var err error
// Note we use an = and not a := as our variables
// are already initialised
db, err = gorm.Open("sqlite3", "cache.db")
if err != nil {
log.Fatal(err)
}
// Turn off logging globally
db.LogMode(false)
}
FindSomethingByID(id int) {
err := db.Query("...")
// code
}
这是一个快速的胜利并减少了重复。
在较大的应用程序中,通过将依赖项(如数据库池、配置参数等)包装在类型中并创建自定义处理程序来更明确地传递它们通常是有意义的。
您还可以初始化您的连接package main并通过设置私有包级变量的函数将其传递*gorm.DB给您的database包func New(db *gorm.DB)。
TA贡献1943条经验 获得超7个赞
最明显的简化是将db.LogMode(false)调用移动到DBSession()函数中,并给出DBSession()一个较短的名称,如DB():
func DB() (db gorm.DB) {
sqliteSession, err := gorm.Open("sqlite3", cache.db)
if err != nil {
log.Fatal(err)
}
sqliteSession.LogMode(false)
return sqliteSession
}
并使用它:
FindSomethingByID(id int) {
db := DB()
// code
}
现在,使用 db 会话的每个函数中只有 1 行,这是一个简单的函数调用。如果你总是需要一个新的数据库会话,你真的不能让它更短。
- 2 回答
- 0 关注
- 162 浏览
添加回答
举报