首頁 >後端開發 >Golang >如何在 Go 中的 HTTP Goroutine 之間共用 MySQL 連線?

如何在 Go 中的 HTTP Goroutine 之間共用 MySQL 連線?

Linda Hamilton
Linda Hamilton原創
2024-11-27 03:40:14286瀏覽

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

如何在 HTTP Goroutine 之間共用 MySQL 連線?

Go 中,database/sql 套件簡化了 HTTP Goroutines 之間資料庫連線的共用。透過建立連接池,它會自動管理資料庫連接的開啟和關閉。

sql.Open(...) 函數傳回一個連線池句柄,而不僅僅是單一連線。當池完全利用時,database/sql 套件會處理開啟新連線。

要在提供的程式碼範例中共用資料庫連接,請在 main() 函數中實例化資料庫連接並將其指派給全域變數以便於 HTTP 處理程序對其進行存取。

var db *sql.DB // Global variable for sharing between main and HTTP handler

然後,在 main() 函數中,使用 sql.Open(...) 初始化連線池。 SetMaxIdleConns(...) 設定池中的空閒連線數。 Ping() 呼叫可確保在需要時建立連線。

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

    db.SetMaxIdleConns(100)

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

在 HomeHandler HTTP 處理程序中,使用全域 db 變數來執行查詢。

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)
    }
}

按照以下步驟操作透過此方法,資料庫連線可以在 HTTP goroutine 之間有效率地共享,而不需要手動開啟和關閉連線。

以上是如何在 Go 中的 HTTP Goroutine 之間共用 MySQL 連線?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn