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