Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah cara saya berkongsi sambungan MySQL merentas berbilang gorouti HTTP dalam Go?

Bagaimanakah cara saya berkongsi sambungan MySQL merentas berbilang gorouti HTTP dalam Go?

Linda Hamilton
Linda Hamiltonasal
2024-11-10 09:56:02574semak imbas

How do I share a MySQL connection across multiple HTTP goroutines in Go?

Berkongsi Sambungan MySQL dalam Go HTTP Go

Apabila bekerja dengan gorouti HTTP dalam Go, adalah penting untuk mengoptimumkan prestasi dengan berkongsi sambungan pangkalan data. Artikel ini menunjukkan cara untuk mewujudkan dan berkongsi sambungan MySQL antara berbilang pengendali HTTP.

Pengurusan Sambungan Pangkalan Data

Dalam Go, pakej pangkalan data/sql mengendalikan pengumpulan sambungan secara automatik. Apabila memanggil sql.Open(...), kolam sambungan dibuat dan bukannya sambungan tunggal. Ini bermakna pakej pangkalan data/sql akan secara automatik mendapatkan sambungan daripada kumpulan jika semua sambungan sudah digunakan.

Pelaksanaan Kod

Untuk berkongsi sambungan MySQL dalam gorouti HTTP anda, ikuti ini langkah:

  1. Mulakan Pangkalan Data Sambungan:

    • Buka kolam sambungan menggunakan sql.Open("mysql", "").

    Contoh:

    db, err := sql.Open("mysql", "root:@/mydb?charset=utf8")
    if err != nil {
        log.Fatalf("Error opening database: %v", err)
    }
  2. Konfigurasikan Pengumpulan Sambungan:

    • Laraskan bilangan maksimum sambungan melahu yang digunakan db.SetMaxIdleConns(100).
  3. Kongsi Pemegang Sambungan:

    • Isytiharkan pembolehubah db sebagai pembolehubah global untuk berkongsi antara utama dan HTTP pengendali.

    Contoh:

    var db *sql.DB
  4. Semak Sambungan Pangkalan Data:

    • Panggil db.Ping() dalam main() untuk mewujudkan sambungan awal ke pangkalan data.

    Contoh:

    err = db.Ping()
    if err != nil {
        log.Fatalf("Error opening database connection: %s", err.Error())
    }
  5. Gunakan Sambungan dalam Pengendali HTTP:

    • Dalam pengendali HTTP, gunakan pemegang db kongsi untuk melaksanakan pangkalan data pertanyaan.

    Contoh:

    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 langkah-langkah ini, anda boleh berkongsi sambungan MySQL dengan cekap merentas berbilang goroutin HTTP tanpa menjejaskan prestasi.

Atas ialah kandungan terperinci Bagaimanakah cara saya berkongsi sambungan MySQL merentas berbilang gorouti HTTP 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