登录
首页 >  Golang >  Go问答

Go 应用程序中处理数据库连接的方法和技巧

来源:stackoverflow

时间:2024-02-08 08:33:23 213浏览 收藏

IT行业相对于一般传统行业,发展更新速度更快,一旦停止了学习,很快就会被行业所淘汰。所以我们需要踏踏实实的不断学习,精进自己的技术,尤其是初学者。今天golang学习网给大家整理了《Go 应用程序中处理数据库连接的方法和技巧》,聊聊,我们一起来看看吧!

问题内容

我的 web api 应用程序中有一组函数。它们对 postgres 数据库中的数据执行一些操作。

func CreateUser () {
    db, err := sql.Open("postgres", "user=postgres password=password dbname=api_dev sslmode=disable")
    // Do some db operations here
}

我认为函数应该彼此独立地与数据库一起使用,所以现在每个函数内都有 sql.open(...) 。我不知道这是否是管理数据库连接的正确方法。

我应该在应用程序启动后在某个地方打开它并将 db 作为参数传递给相应的函数,而不是在每个函数中打开连接吗?


正确答案


每次需要时都打开数据库连接会浪费资源,而且速度很慢。

相反,您应该在应用程序启动时(或第一次需要时)创建一次 sql.DB,并将其传递到需要的地方(例如作为函数参数或通过某些上下文),或者只是将其设为全局变量所以每个人都可以访问它。从多个 goroutine 调用是安全的。

引用sql.Open()的文档:

您可以使用包 init() 函数来初始化它:

var db *sql.db

func init() {
    var err error
    db, err = sql.open("yourdriver", "yourds")
    if err != nil {
        log.fatal("invalid db config:", err)
    }
}

这里需要注意的一件事是 sql.open() 可能不会创建与数据库的实际连接,它可能只是验证其参数。要测试是否确实可以连接到数据库,请使用 DB.Ping(),例如:

func init() {
    var err error
    db, err = sql.Open("yourdriver", "yourDs")
    if err != nil {
        log.Fatal("Invalid DB config:", err)
    }
    if err = db.Ping(); err != nil {
        log.Fatal("DB unreachable:", err)
    }
}

今天关于《Go 应用程序中处理数据库连接的方法和技巧》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>