database/sql
在 Go 中操作数据库通常使用标准的 database/sql 包和第三方数据库驱动。下面是一些操作数据库的常见步骤和示例:
1. 安装数据库驱动
首先,你需要安装相应的数据库驱动。以 PostgreSQL 为例,可以使用 github.com/lib/pq 驱动。
bash
go get github.com/lib/pq2. 连接数据库
使用 database/sql 包来创建数据库连接。
go
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/lib/pq" // 导入 PostgreSQL 驱动
)
func main() {
// 连接到 PostgreSQL 数据库
connStr := "user=username dbname=mydb sslmode=disable"
db, err := sql.Open("postgres", connStr)
if err != nil {
log.Fatal(err)
}
defer db.Close()
// 测试数据库连接
err = db.Ping()
if err != nil {
log.Fatal(err)
}
fmt.Println("成功连接到数据库!")
}3. 执行查询(SELECT)
go
func queryData(db *sql.DB) {
rows, err := db.Query("SELECT id, name FROM users")
if err != nil {
log.Fatal(err)
}
defer rows.Close()
for rows.Next() {
var id int
var name string
err := rows.Scan(&id, &name)
if err != nil {
log.Fatal(err)
}
fmt.Printf("ID: %d, Name: %s\n", id, name)
}
err = rows.Err()
if err != nil {
log.Fatal(err)
}
}4. 插入数据(INSERT)
go
func insertData(db *sql.DB) {
_, err := db.Exec("INSERT INTO users(name) VALUES($1)", "Alice")
if err != nil {
log.Fatal(err)
}
fmt.Println("插入成功!")
}5. 更新数据(UPDATE)
go
func updateData(db *sql.DB) {
_, err := db.Exec("UPDATE users SET name = $1 WHERE id = $2", "Bob", 1)
if err != nil {
log.Fatal(err)
}
fmt.Println("更新成功!")
}6. 删除数据(DELETE)
go
func deleteData(db *sql.DB) {
_, err := db.Exec("DELETE FROM users WHERE id = $1", 1)
if err != nil {
log.Fatal(err)
}
fmt.Println("删除成功!")
}7. 事务处理
go
func transactionExample(db *sql.DB) {
tx, err := db.Begin()
if err != nil {
log.Fatal(err)
}
// 执行多个操作
_, err = tx.Exec("UPDATE users SET name = $1 WHERE id = $2", "Charlie", 1)
if err != nil {
tx.Rollback()
log.Fatal(err)
}
// 提交事务
err = tx.Commit()
if err != nil {
log.Fatal(err)
}
fmt.Println("事务提交成功!")
}8. 错误处理
Go 中的数据库操作会返回错误,必须检查每个操作的错误并适当处理。
9. 关闭连接
数据库连接通常应该在使用后关闭,通常通过 defer db.Close() 来确保连接在函数结束时关闭。
以上是一些常见的 Go 操作数据库的基本步骤。如果你使用其他数据库(如 MySQL、SQLite 等),只需更换相应的驱动并调整连接字符串。