Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Berkongsi Sambungan MySQL antara HTTP Goroutines dalam Go?

Bagaimana untuk Berkongsi Sambungan MySQL antara HTTP Goroutines dalam Go?

Linda Hamilton
Linda Hamiltonasal
2024-11-27 03:40:14354semak imbas

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

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn