Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Berkongsi Pengendali Sambungan MySQL Antara Pengendali HTTP Go?

Bagaimana untuk Berkongsi Pengendali Sambungan MySQL Antara Pengendali HTTP Go?

Linda Hamilton
Linda Hamiltonasal
2024-11-12 22:20:02904semak imbas

How to Share a MySQL Connection Handle Between Go HTTP Handlers?

Mengurus Sambungan MySQL dalam Pengendali HTTP Go

Pakej pangkalan data/sql dalam Go mengendalikan sambungan pangkalan data dan mengurus pengumpulan sambungan secara automatik. Apabila menggunakan sql.Open(), ia mengembalikan pemegang yang menguruskan kolam sambungan. Pemegang ini mewujudkan sambungan baharu mengikut keperluan, memastikan sentiasa ada sambungan tersedia untuk operasi pangkalan data.

Berkongsi Pemegang Sambungan Pangkalan Data

Dalam kod anda, anda telah mencipta db pembolehubah global jenis *sql.DB dalam fungsi main(). Pembolehubah ini mewakili pemegang kolam sambungan. Untuk berkongsinya dengan pengendali HTTP, anda boleh menghantar pemegang db sebagai parameter kepada fungsi pengendali.

Menggunakan Pemegang Sambungan dalam Pengendali HTTP

Dalam HomeHandler fungsi, anda boleh mengakses sambungan pangkalan data dengan menggunakan pemegang db yang diluluskan sebagai a parameter:

import (
    "database/sql"
    "fmt"
)

func HomeHandler(w http.ResponseWriter, r *http.Request, db *sql.DB) {
    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)
    }
}

Pendaftaran Pengendali HTTP

Dalam fungsi main(), apabila mendaftar pengendali HTTP, anda boleh menghantar pemegang db sebagai hujah:

import (
    "github.com/gorilla/mux"
)

func main() {
    fmt.Println("starting up")

    db, err := sql.Open("mysql", "root@unix(/tmp/mysql.sock)/mydb")
    if err != nil {
        log.Fatalf("Error on initializing database connection: %s", err.Error())
    }
    
    r := mux.NewRouter()
    r.HandleFunc("/", HomeHandler(db)) // Pass the db handle as an argument to the handler

    http.Handle("/", r)
    http.ListenAndServe(":8080", nil)
}

Dengan mengikuti langkah-langkah ini, anda boleh berkongsi sambungan MySQL antara gorouti HTTP dalam Go dengan berkesan. Pengumpulan sambungan automatik pakej pangkalan data/sql memastikan prestasi optimum dan pengurusan sumber.

Atas ialah kandungan terperinci Bagaimana untuk Berkongsi Pengendali Sambungan MySQL Antara Pengendali HTTP 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