Merujuk Sambungan Pangkalan Data Terbuka dalam Fungsi dalam Go
Apabila bekerja dengan pangkalan data dalam Go, adalah perkara biasa untuk mewujudkan sambungan ke pangkalan data dalam fungsi utama dan kemudian gunakan sambungan ini sepanjang aplikasi. Walau bagaimanapun, apakah yang berlaku apabila anda ingin merangkum operasi pangkalan data dalam fungsi?
Pertimbangkan senario berikut. Dalam fungsi utama anda, anda membuka sambungan pangkalan data:
<code class="go">func main() { db, err := sql.Open("sqlite3", "./house.db") checkErr(err) ... }</code>
Kini, anda berminat untuk mencipta fungsi yang menambah baris pada pangkalan data berdasarkan struct yang diluluskan:
<code class="go">func addRow(row Room) error { stmt, err := db.Prepare("INSERT INTO Rooms (Name, Size, WindowCount, WallDecorationType, Floor) VALUES(?, ?, ?, ?, ?)") _, err = stmt.Exec(row.Name , row.Size , row.WindowCount , row.WallDecorationType , row.Floor) return err }</code>
Tetapi inilah cabarannya: fungsi addRow() tidak mempunyai pengetahuan tentang pembolehubah db yang ditakrifkan dalam fungsi utama.
Cara Mengendalikan Rujukan Sambungan Pangkalan Data
Bergantung berdasarkan sifat aplikasi anda, anda mempunyai beberapa pilihan untuk merujuk sambungan pangkalan data dalam fungsi addRow():
<code class="go">func addRow(db *sql.DB, row Room) error</code>
<code class="go">type dbConn struct { db *sql.DB } func (conn dbConn) addRow(row Room) error</code>
Contoh Penggunaan
Mari kita tunjukkan penggunaan pendekatan pembolehubah global:
<code class="go">var db *sql.DB func main() { db, err := sql.Open("sqlite3", "./house.db") checkErr(err) // create room Room{} err = addRow(room) checkErr(err) }</code>
Dengan mengisytiharkan db sebagai pembolehubah global, ia boleh diakses oleh fungsi addRow() di mana-mana dalam program.
Perlu diingat bahawa pendekatan yang anda pilih harus disesuaikan dengan keperluan khusus anda aplikasi, seni binanya dan pertimbangan prestasi.
Atas ialah kandungan terperinci Bagaimana untuk Mengakses Sambungan Pangkalan Data daripada Fungsi dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!