Bagaimana untuk Berkongsi Sambungan MySQL Antara HTTP Goroutines dalam Go?

Mary-Kate Olsen
Lepaskan: 2024-11-18 06:14:02
asal
323 orang telah melayarinya

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

Berkongsi Sambungan MySQL antara HTTP Goroutines dalam Go

Dalam Go, mengurus sambungan pangkalan data secara serentak boleh menjadi agak mengelirukan. Artikel ini meneroka cara untuk berkongsi sambungan MySQL secara berkesan antara berbilang gorouti HTTP.

Ikhtisar

Apabila menggunakan pakej pangkalan data/sql dalam Go, memanggil sql.Open() tidak mewujudkan sambungan segera sambungan pangkalan data. Sebaliknya, ia mencipta kumpulan sambungan, koleksi sambungan yang diuruskan oleh pakej. Pakej secara automatik mengendalikan pengumpulan, membuka sambungan baharu apabila diperlukan.

Berkongsi Sambungan

Untuk berkongsi sambungan antara pengendali utama() dan HTTP, isytiharkan pembolehubah db global:

var db *sql.DB
Salin selepas log masuk

Dalam main(), mulakan kumpulan sambungan:

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

Pengendali HTTP kemudiannya boleh mengakses sambungan pangkalan data yang dikongsi:

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

Kesimpulan

Dengan mengikuti langkah ini, anda boleh berkongsi sambungan MySQL dengan berkesan antara berbilang goroutin HTTP dalam Go, memastikan capaian pangkalan data yang cekap tanpa overhed yang tidak perlu.

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