Dengan kemunculan era Internet, sejumlah besar data perlu disimpan dan diurus. Sebagai alat pengurusan data yang cekap, pangkalan data memainkan peranan penting. Dalam pembangunan sebenar, bahasa Go telah digunakan secara meluas untuk operasi pangkalan data Artikel ini akan memperkenalkan cara menggunakan bahasa Go untuk operasi pangkalan data.
1. Operasi pangkalan data dalam bahasa Go
Bahasa Go mempunyai sokongan terbina dalam untuk pangkalan data SQL dan menyediakan pakej database/sql
dan database/sql/driver
untuk melaksanakan operasi berkaitan pangkalan data. Memandangkan database/sql
ialah antara muka universal, ia boleh berfungsi dengan mana-mana pemacu pangkalan data yang mematuhi antara muka ini, seperti MySQL, PostgreSQL, SQLite, dsb.
2 Sambung ke pangkalan data MySQL
Sebelum menggunakan bahasa Go untuk operasi pangkalan data, kami perlu memasang pemacu yang sepadan terlebih dahulu.
Mengambil pangkalan data MySQL sebagai contoh, kita boleh menggunakan perintah go get
untuk memasang pemacu MySQL:
go get -u github.com/go-sql-driver/mysql
Selepas pemasangan berjaya, kami boleh menyambung ke pangkalan data MySQL dan melaksanakan operasi pertanyaan :
package main import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" ) func main() { db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/dbname") if err != nil { panic(err.Error()) } defer db.Close() rows, err := db.Query("SELECT id, name FROM users") if err != nil { panic(err.Error()) } defer rows.Close() var id int var name string for rows.Next() { err := rows.Scan(&id, &name) if err != nil { panic(err.Error()) } fmt.Printf("ID: %d, Name: %s ", id, name) } }
Dalam kod di atas, kami menyambung ke pangkalan data MySQL melalui fungsi sql.Open()
. Parameter pertama fungsi ini ialah nama pemacu pangkalan data, dan parameter kedua ialah rentetan sambungan.
Kemudian, kami melaksanakan pernyataan pertanyaan melalui fungsi db.Query()
, yang mengembalikan set hasil jenis *sql.Rows
. Seterusnya, kami melingkari setiap baris data melalui rows.Next()
dan kemudian membaca data menjadi pembolehubah melalui fungsi rows.Scan()
.
3. Parameterisasi pernyataan pertanyaan
Dalam aplikasi sebenar, kita selalunya perlu menggunakan pembolehubah sebagai parameter pernyataan pertanyaan. Pernyataan pertanyaan berparameter boleh mengelakkan serangan suntikan SQL dengan berkesan dan meningkatkan kecekapan pertanyaan.
Dalam bahasa Go, kita boleh menggunakan ruang letak dalam bentuk ?
atau :name
untuk mewakili parameter pernyataan pertanyaan. Kemudian, sebelum melaksanakan pernyataan pertanyaan, kita perlu memanggil fungsi Prepare()
untuk mempraproses pernyataan pertanyaan dan kemudian melaksanakan operasi pertanyaan.
package main import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" ) func main() { db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/dbname") if err != nil { panic(err.Error()) } defer db.Close() stmt, err := db.Prepare("SELECT id, name FROM users WHERE id = ?") if err != nil { panic(err.Error()) } defer stmt.Close() var id int = 1 rows, err := stmt.Query(id) if err != nil { panic(err.Error()) } defer rows.Close() var name string for rows.Next() { err := rows.Scan(&id, &name) if err != nil { panic(err.Error()) } fmt.Printf("ID: %d, Name: %s ", id, name) } }
Dalam kod di atas, kami menggunakan fungsi stmt.Query()
untuk melaksanakan pernyataan pertanyaan dengan parameter id
. Ambil perhatian bahawa kita perlu menggunakan fungsi db.Prepare()
untuk pramemproses pernyataan pertanyaan, yang membolehkan pangkalan data untuk menyusun semula pernyataan SQL dan meningkatkan kecekapan pertanyaan.
4. Pemprosesan transaksi
Dalam aplikasi sebenar, kami biasanya perlu melakukan pemprosesan transaksi pada pangkalan data untuk memastikan integriti dan konsistensi data.
Dalam bahasa Go, kita boleh menggunakan fungsi db.Begin()
untuk memulakan transaksi, dan kemudian melaksanakan semua operasi pangkalan data dalam transaksi. Jika semua operasi berjaya dilaksanakan, kita boleh memanggil fungsi tx.Commit()
untuk melakukan transaksi, jika tidak, kita perlu memanggil fungsi tx.Rollback()
untuk melancarkan transaksi.
package main import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" ) func main() { db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/dbname") if err != nil { panic(err.Error()) } defer db.Close() tx, err := db.Begin() if err != nil { panic(err.Error()) } stmt, err := tx.Prepare("UPDATE users SET name = ? WHERE id = ?") if err != nil { panic(err.Error()) } defer stmt.Close() _, err = stmt.Exec("Bob", 1) if err != nil { tx.Rollback() panic(err.Error()) } _, err = stmt.Exec("Mike", 2) if err != nil { tx.Rollback() panic(err.Error()) } err = tx.Commit() if err != nil { tx.Rollback() panic(err.Error()) } fmt.Println("Transaction committed.") }
Dalam kod di atas, kami menggunakan fungsi db.Begin()
untuk memulakan transaksi, dan kemudian menggunakan objek transaksi tx
untuk melaksanakan semua operasi pangkalan data. Selepas semua operasi dilaksanakan dengan jayanya, kami memanggil fungsi tx.Commit()
untuk melakukan transaksi, jika tidak, urus niaga akan ditarik balik.
5. Ringkasan
Artikel ini memperkenalkan cara menggunakan bahasa Go untuk operasi pangkalan data, termasuk menyambung ke pangkalan data, parameterisasi pernyataan pertanyaan dan pemprosesan transaksi. Melalui kajian artikel ini, pembaca boleh menguasai kemahiran operasi pangkalan data bahasa Go dan memberikan bantuan untuk pembangunan aplikasi sebenar.
Atas ialah kandungan terperinci Bagaimana untuk menggunakan bahasa Go untuk operasi pangkalan data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!