英文:
What is the idiomatic way to share an SQL connection between packages?
问题
通常我会在主包中声明一个公共的Db
变量。
package main
var Db *sql.DB
func main() {
var err error
Db, err = sql.Open("sqlite3", BARS_FILE)
if err != nil {
log.Fatal(err)
}
defer Db.Close()
// 将Db作为参数传递给其他包中的函数(数据库存储库)
}
有没有更好的方法来做这个?
英文:
I usually declare a public Db
variable in the main package
package main
var Db *sql.DB
func main() {
var err error
Db, err = sql.Open("sqlite3", BARS_FILE)
if err != nil {
log.Fatal(err)
}
defer Db.Close()
// passing Db as a parameter to other functions in other packages (database
// repositories)
}
Is there a better way of doing this?
答案1
得分: 2
根据http://golang.org/pkg/database/sql/#DB的说明,可以安全地使用sql.DB:
DB是一个数据库句柄。它可以被多个goroutine并发使用。
在我看来,这种用法是可以的。也许以后,当这个变量成为瓶颈时,你可以创建更多的句柄。如果有很多goroutine开始使用它,这种情况可能会发生。但在必要之前不要进行优化。
英文:
According to http://golang.org/pkg/database/sql/#DB it is safe to use sql.DB this way:
> DB is a database handle. It's safe for concurrent use by multiple
> goroutines.
And IMHO it is ok to use it that way. Maybe later, when this variable becomes bottleneck you could create more handles. It could happen if a lot of gouroutines start using it. But do not optimize before it is necessary.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论