首页  >  文章  >  后端开发  >  如何在 Go 中的 HTTP Goroutine 之间共享 MySQL 连接?

如何在 Go 中的 HTTP Goroutine 之间共享 MySQL 连接?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-18 06:14:02317浏览

How to Share a MySQL Connection Among HTTP Goroutines in Go?

在 Go 中的 HTTP Goroutine 之间共享 MySQL 连接

在 Go 中,管理并发数据库连接可能有点令人困惑。本文探讨了如何在多个 HTTP goroutine 之间有效地共享 MySQL 连接。

概述

在 Go 中使用 database/sql 包时,调用 sql.Open() 不会立即建立连接数据库连接。相反,它创建一个连接池,即由包管理的连接的集合。该包会自动处理池化,并在需要时打开新连接。

共享连接

要共享 main() 和 HTTP 处理程序之间的连接,请声明一个全局数据库变量:

var db *sql.DB

在 main() 中,初始化连接池:

db, err := sql.Open("mysql", "root@unix(/tmp/mysql.sock)/mydb")
if err != nil {
    log.Fatalf("Error on initializing database connection: %s", err.Error())
}

db.SetMaxIdleConns(100)

err = db.Ping() // Opens a connection if necessary
if err != nil {
    log.Fatalf("Error on opening database connection: %s", err.Error())
}

HTTP 处理程序可以访问共享数据库连接:

func HomeHandler(w http.ResponseWriter, r *http.Request) {
    var msg string
    err := db.QueryRow("SELECT msg FROM hello WHERE page=?", "home").Scan(&msg)
    if err != nil {
        fmt.Fprintf(w, "Database Error!")
    } else {
        fmt.Fprintf(w, msg)
    }
}

结论

通过以下步骤,您可以在 Go 中的多个 HTTP goroutine 之间有效地共享 MySQL 连接,从而确保高效的数据库访问,而无需不必要的开销。

以上是如何在 Go 中的 HTTP Goroutine 之间共享 MySQL 连接?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn