阅读量:2
以下是Golang在Linux下操作数据库的指南,以MySQL为例,其他数据库(如PostgreSQL、MongoDB)可参考对应驱动调整。
一、环境准备
-
安装Go环境
通过包管理器安装,如Ubuntu/Debian:sudo apt update && sudo apt install golang或手动安装:Go官方下载。
-
安装数据库
- MySQL:
sudo apt install mysql-server sudo systemctl start mysql && sudo systemctl enable mysql - PostgreSQL:
sudo apt install postgresql postgresql-contrib sudo service postgresql start
- MySQL:
-
安装数据库驱动
- MySQL驱动:
go get -u github.com/go-sql-driver/mysql - PostgreSQL驱动:
go get -u github.com/lib/pq
- MySQL驱动:
二、基础数据库操作
1. 连接数据库
import (
"database/sql"
_ "github.com/go-sql-driver/mysql" // MySQL驱动
)
func main() {
dsn := "username:password@tcp(localhost:3306)/dbname?charset=utf8mb4&parseTime=True"
db, err := sql.Open("mysql", dsn)
if err != nil {
panic(err)
}
defer db.Close()
// 测试连接
if err := db.Ping(); err != nil {
panic(err)
}
fmt.Println("数据库连接成功!")
}
2. CRUD操作
-
插入数据
_, err := db.Exec("INSERT INTO users(name, age) VALUES (?, ?)", "Alice", 25) if err != nil { panic(err) } -
查询单行
var name string err := db.QueryRow("SELECT name FROM users WHERE id = ?", 1).Scan(&name) if err != nil { panic(err) } fmt.Println("用户名:", name) -
查询多行
rows, err := db.Query("SELECT id, name FROM users") if err != nil { panic(err) } defer rows.Close() for rows.Next() { var id int var name string if err := rows.Scan(&id, &name); err != nil { panic(err) } fmt.Println(id, name) } -
更新数据
_, err := db.Exec("UPDATE users SET age = ? WHERE id = ?", 30, 1) if err != nil { panic(err) } -
删除数据
_, err := db.Exec("DELETE FROM users WHERE id = ?", 1) if err != nil { panic(err) }
三、进阶操作
1. 连接池配置
db.SetMaxOpenConns(50) // 最大打开连接数
db.SetMaxIdleConns(10) // 最大空闲连接数
db.SetConnMaxLifetime(time.Hour) // 连接最大生命周期
2. 预处理语句
stmt, err := db.Prepare("SELECT * FROM users WHERE age > ?")
if err != nil {
panic(err)
}
defer stmt.Close()
rows, err := stmt.Query(18)
// 处理结果...
3. 事务处理
tx, err := db.Begin()
if err != nil {
panic(err)
}
defer func() {
if err != nil {
tx.Rollback()
return
}
tx.Commit()
}()
_, err = tx.Exec("UPDATE accounts SET balance = balance - ? WHERE id = ?", 100, 1)
if err != nil {
panic(err)
}
_, err = tx.Exec("UPDATE accounts SET balance = balance + ? WHERE id = ?", 100, 2)
if err != nil {
panic(err)
}
四、其他数据库操作
1. PostgreSQL示例
连接字符串示例:
dsn := "user=username password=secret dbname=mydb sslmode=disable"
db, err := sql.Open("postgres", dsn)
2. MongoDB示例(需安装驱动)
import (
"context"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
func main() {
clientOptions := options.Client().ApplyURI("mongodb://localhost:27017")
client, err := mongo.Connect(context.TODO(), clientOptions)
if err != nil {
panic(err)
}
defer client.Disconnect(context.TODO())
collection := client.Database("test").Collection("users")
// 插入、查询等操作...
}
五、注意事项
- 权限管理:确保数据库用户有对应权限,生产环境避免使用root账户。
- 错误处理:始终检查
err,避免程序因未捕获错误崩溃。 - 资源释放:使用
defer关闭数据库连接、语句和结果集。 - 性能优化:合理配置连接池参数,避免频繁创建连接。
参考资料:
以上就是关于“Golang在Linux下的数据库操作指南”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm