在 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中文网其他相关文章!