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