首页 > 后端开发 > Golang > 正文

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

Linda Hamilton
发布: 2024-11-12 22:20:02
原创
810 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板