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?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-18 06:14:02389semak imbas

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

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())
}

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)
    }
}

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!

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