Golang集成SQLite数据库方案
最近在学习Golang开发,想在自己的项目里集成SQLite数据库,但不知道有哪些成熟的方案。请问大家常用的Golang SQLite驱动有哪些推荐?需要注意哪些性能优化和并发问题?有没有比较完整的集成示例可以参考?
2 回复
推荐使用database/sql配合github.com/mattn/go-sqlite3驱动。
安装:go get github.com/mattn/go-sqlite3
示例代码:
import (
"database/sql"
_ "github.com/mattn/go-sqlite3"
)
db, err := sql.Open("sqlite3", "./test.db")
轻量高效,适合嵌入式或小型项目。
更多关于Golang集成SQLite数据库方案的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在Golang中集成SQLite数据库,推荐使用modernc.org/sqlite驱动,这是纯Go实现的SQLite驱动,无需CGO依赖,跨平台兼容性好。
安装依赖
go get modernc.org/sqlite
基础使用示例
package main
import (
"database/sql"
"fmt"
"log"
_ "modernc.org/sqlite"
)
func main() {
// 打开数据库连接
db, err := sql.Open("sqlite", "test.db")
if err != nil {
log.Fatal(err)
}
defer db.Close()
// 创建表
_, err = db.Exec(`
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT UNIQUE NOT NULL
)
`)
if err != nil {
log.Fatal(err)
}
// 插入数据
result, err := db.Exec(
"INSERT INTO users (name, email) VALUES (?, ?)",
"张三", "zhangsan@example.com",
)
if err != nil {
log.Fatal(err)
}
id, _ := result.LastInsertId()
fmt.Printf("插入成功,ID: %d\n", id)
// 查询数据
rows, err := db.Query("SELECT id, name, email FROM users")
if err != nil {
log.Fatal(err)
}
defer rows.Close()
for rows.Next() {
var id int
var name, email string
err = rows.Scan(&id, &name, &email)
if err != nil {
log.Fatal(err)
}
fmt.Printf("ID: %d, Name: %s, Email: %s\n", id, name, email)
}
}
连接池配置
db.SetMaxOpenConns(1) // SQLite是文件级锁,建议设置为1
db.SetMaxIdleConns(1)
db.SetConnMaxLifetime(0)
事务处理
func transferMoney(db *sql.DB, from, to int, amount float64) error {
tx, err := db.Begin()
if err != nil {
return err
}
defer tx.Rollback()
// 执行多个操作
_, err = tx.Exec("UPDATE accounts SET balance = balance - ? WHERE id = ?", amount, from)
if err != nil {
return err
}
_, err = tx.Exec("UPDATE accounts SET balance = balance + ? WHERE id = ?", amount, to)
if err != nil {
return err
}
return tx.Commit()
}
优势特点
- 无CGO依赖:纯Go实现,交叉编译简单
- 轻量级:单个文件数据库,适合嵌入式场景
- 事务支持:完整的ACID事务
- 零配置:开箱即用,无需额外安装
这种方案适合中小型项目、原型开发和嵌入式系统等场景。

