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
Lepaskan: 2024-11-27 03:40:14
asal
338 orang telah melayarinya

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
Salin selepas log masuk

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())
    }
}
Salin selepas log masuk

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)
    }
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan