Trong phát triển phần mềm, thường cần phải kiểm tra và xác thực logic bằng hệ thống cơ sở dữ liệu nhẹ và dễ quản lý. SQLite, với thiết lập tối thiểu và không yêu cầu cấu hình, là một lựa chọn tuyệt vời cho các trường hợp như vậy. Tận dụng sự đơn giản và hiệu quả của SQLite cho mục đích kiểm tra có thể đơn giản hóa đáng kể quá trình phát triển. Trong hướng dẫn này, chúng ta sẽ khám phá cách kết nối liền mạch với SQLite bằng Go trên Windows, giúp các nhà phát triển kiểm tra mã của họ một cách hiệu quả với giải pháp cơ sở dữ liệu đáng tin cậy và đơn giản.
Cài đặt gói SQLIte3
Go có hỗ trợ tích hợp cho SQLite3, vì vậy bạn không cần phải cài đặt bất kỳ gói bổ sung nào. Tuy nhiên, nếu bạn muốn sử dụng trình điều khiển SQLite3 cụ thể, bạn có thể cài đặt nó bằng lệnh go get
.
go get github.com/mattn/go-sqlite3
Có thể có lỗi được báo cáo khi cố gắng cài đặt các gói.
$ go get github.com/mattn/go-sqlite3
go: downloading github.com/mattn/go-sqlite3 v1.14.22
# github.com/mattn/go-sqlite3
cgo: exec gcc: exec: "gcc": executable file not found in %PATH%
Để khắc phục điều này, cần phải cài đặt gcc. Có thể làm theo trang tải xuống chính thức để tải xuống và cài đặt gcc
. Sau khi cài đặt, có thể xác minh xem nó đã được cài đặt thành công.
$ gcc -v
Using built-in specs.
COLLECT_GCC=C:\TDM-GCC-64\bin\gcc.exe
COLLECT_LTO_WRAPPER=C:/TDM-GCC-64/bin/../libexec/gcc/x86_64-w64-mingw32/10.3.0/lto-wrapper.exe
Target: x86_64-w64-mingw32
Configured with: ../../../src/gcc-git-10.3.0/configure --build=x86_64-w64-mingw32 --enable-targets=all --enable-languages=ada,c,c++,fortran,jit,lto,objc,obj-c++ --enable-libgomp --enable-lto --enable-graphite --enable-cxx-flags=-DWINPTHREAD_STATIC --disable-build-with-cxx --disable-build-poststage1-with-cxx --enable-libstdcxx-debug --enable-threads=posix
--enable-version-specific-runtime-libs --enable-fully-dynamic-string --enable-libstdcxx-filesystem-ts=yes --disable-libstdcxx-pch --enable-libstdcxx-threads --enable-libstdcxx-time=yes --enable-mingw-wildcard --with-gnu-ld --disable-werror --enable-nls --disable-win32-registry --enable-large-address-aware --disable-rpath --disable-symvers --prefix=/mingw64tdm --with-local-prefix=/mingw64tdm --with-pkgversion=tdm64-1 --with-bugurl=https://github.com/jmeubank/tdm-gcc/issues
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 10.3.0 (tdm64-1)
Viết mã Go của bạn
Đây là một ví dụ cơ bản về mã Go kết nối với cơ sở dữ liệu SQLite3, tạo bảng và chèn một số dữ liệu:
package main
import (
"database/sql"
"fmt"
_ "github.com/mattn/go-sqlite3"
)
func main() {
// Mở cơ sở dữ liệu SQLite
db, err := sql.Open("sqlite3", "test.db")
if err != nil {
fmt.Println("Lỗi mở cơ sở dữ liệu:", err)
return
}
defer db.Close()
// Tạo bảng nếu chưa tồn tại
_, err = db.Exec(`
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT
)
`)
if err != nil {
fmt.Println("Lỗi tạo bảng:", err)
return
}
// Chèn một số dữ liệu
_, err = db.Exec("INSERT INTO users (name) VALUES (?)", "Alice")
if err != nil {
fmt.Println("Lỗi chèn dữ liệu:", err)
return
}
fmt.Println("Dữ liệu đã được chèn thành công")
}
Mã này tạo một cơ sở dữ liệu SQLite3 có tên là test.db
, tạo một bảng có tên là users
và chèn một bản ghi với tên là Alice.
Chạy mã của bạn
Lưu mã vào một tệp, ví dụ: main.go, sau đó điều hướng đến thư mục chứa mã của bạn trong dấu nhắc lệnh. Chạy lệnh sau để thực thi chương trình Go của bạn:
go run main.go
Điều này sẽ biên dịch và thực thi chương trình Go của bạn, kết nối với cơ sở dữ liệu SQLite3 và thực hiện các thao tác đã chỉ định.
Để truy vấn cơ sở dữ liệu, nó cũng không khó.
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/mattn/go-sqlite3"
)
type User struct {
ID int
Name string
}
func main() {
// Mở cơ sở dữ liệu SQLite
db, err := sql.Open("sqlite3", "test.db")
if err != nil {
log.Fatal("Lỗi mở cơ sở dữ liệu:", err)
}
defer db.Close()
// Truy vấn dữ liệu
rows, err := db.Query("SELECT id, name FROM users")
if err != nil {
log.Fatal("Lỗi truy vấn cơ sở dữ liệu:", err)
}
defer rows.Close()
// Lặp qua các hàng
var users []User
for rows.Next() {
var user User
err := rows.Scan(&user.ID, &user.Name)
if err != nil {
log.Fatal("Lỗi quét hàng:", err)
}
users = append(users, user)
}
// Kiểm tra lỗi từ việc lặp qua các hàng
if err := rows.Err(); err != nil {
log.Fatal("Lỗi lặp qua các hàng:", err)
}
// In dữ liệu đã truy xuất
for _, user := range users {
fmt.Printf("ID: %d, Name: %s\n", user.ID, user.Name)
}
}
Bằng cách làm theo các bước này, bạn có thể kết nối với cơ sở dữ liệu SQLite3 bằng Go trên Windows. Ví dụ cơ bản này có thể được mở rộng để thực hiện các thao tác cơ sở dữ liệu phức tạp hơn nếu cần.