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

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

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-18 06:14:02392瀏覽

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

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

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

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