首頁  >  文章  >  後端開發  >  如何在 Go HTTP 處理程序之間共用 MySQL 連線句柄?

如何在 Go HTTP 處理程序之間共用 MySQL 連線句柄?

Linda Hamilton
Linda Hamilton原創
2024-11-12 22:20:02852瀏覽

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