Bagaimana untuk Berkongsi Sambungan MySQL antara HTTP Goroutines?
Dalam Go, pakej pangkalan data/sql memudahkan perkongsian sambungan pangkalan data antara goroutine HTTP . Dengan mencipta kumpulan sambungan, ia mengurus pembukaan dan penutupan sambungan pangkalan data secara automatik.
Fungsi sql.Open(...) mengembalikan pemegang kolam sambungan, bukan hanya satu sambungan. Pakej pangkalan data/sql mengendalikan pembukaan sambungan baharu apabila kumpulan digunakan sepenuhnya.
Untuk berkongsi sambungan pangkalan data dalam sampel kod yang disediakan, nyatakan sambungan db dalam fungsi main() dan tetapkan ia kepada pembolehubah global untuk memudahkan aksesnya oleh pengendali HTTP.
var db *sql.DB // Global variable for sharing between main and HTTP handler
Kemudian, dalam fungsi main(), gunakan sql.Open(...) untuk memulakan kolam sambungan. SetMaxIdleConns(...) mengkonfigurasi bilangan sambungan melahu dalam kolam. Panggilan Ping() memastikan bahawa sambungan diwujudkan jika perlu.
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()) } }
Dalam pengendali HTTP HomeHandler, gunakan pembolehubah db global untuk melaksanakan pertanyaan.
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) } }
Dengan mengikuti ini pendekatan, sambungan pangkalan data boleh dikongsi dengan cekap antara gorouti HTTP tanpa memerlukan sambungan manual membuka dan menutup.
Atas ialah kandungan terperinci Bagaimana untuk Berkongsi Sambungan MySQL antara HTTP Goroutines dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!