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