首页 >后端开发 >Golang >如何在 Go HTTP 处理程序之间共享 MySQL 连接句柄?

如何在 Go HTTP 处理程序之间共享 MySQL 连接句柄?

Linda Hamilton
Linda Hamilton原创
2024-11-12 22:20:02905浏览

How to Share a MySQL Connection Handle Between Go HTTP Handlers?

在 Go HTTP 处理程序中管理 MySQL 连接

Go 中的 database/sql 包处理数据库连接并自动管理连接池。当调用 sql.Open() 时,它返回一个管理连接池的句柄。该句柄根据需要建立新连接,确保始终有可用的连接用于数据库操作。

共享数据库连接句柄

在您的代码中,您创建了一个main() 函数中类型为 *sql.DB 的全局变量 db。该变量表示连接池句柄。要与 HTTP 处理程序共享它,您可以将数据库句柄作为参数传递给处理程序函数。

在 HTTP 处理程序中使用连接句柄

在 HomeHandler 中函数中,您可以使用作为参数传递的数据库句柄来访问数据库连接:

import (
    "database/sql"
    "fmt"
)

func HomeHandler(w http.ResponseWriter, r *http.Request, db *sql.DB) {
    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)
    }
}

HTTP 处理程序注册

在 main() 函数中,在注册 HTTP 处理程序时,您可以将数据库句柄作为参数传递:

import (
    "github.com/gorilla/mux"
)

func main() {
    fmt.Println("starting up")

    db, err := sql.Open("mysql", "root@unix(/tmp/mysql.sock)/mydb")
    if err != nil {
        log.Fatalf("Error on initializing database connection: %s", err.Error())
    }
    
    r := mux.NewRouter()
    r.HandleFunc("/", HomeHandler(db)) // Pass the db handle as an argument to the handler

    http.Handle("/", r)
    http.ListenAndServe(":8080", nil)
}

按照以下步骤,您可以在 Go 中的 HTTP goroutine 之间有效共享 MySQL 连接。 Database/sql 包的自动连接池可确保最佳性能和资源管理。

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

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