Go语言连接MySQL的完整指南与实践
Go语言连接MySQL主要通过database/sql标准库结合MySQL驱动(如github.com/go-sql-driver/mysql)实现,需使用go get安装驱动,然后通过sql.Open()方法建立连接,并利用db.Ping()验证连通性。关键步骤包括:导入驱动、配置DSN(数据源名称)、处理连接池设置以及执行SQL操作,以下将详细展开具体实现与注意事项。
安装与导入驱动
- 安装MySQL驱动:
go get -u github.com/go-sql-driver/mysql
- 代码中导入包:
import ( "database/sql" _ "github.com/go-sql-driver/mysql" )注意:驱动以匿名方式导入,其
init()函数会自动注册。
配置DSN与建立连接
DSN格式为:"用户名:密码@协议(地址:端口)/数据库名?参数"
db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=true")
if err != nil {
log.Fatal("连接失败:", err)
}
defer db.Close()
关键参数说明:
parseTime=true:将MySQL时间类型解析为Go的time.Time。charset=utf8mb4:支持完整Unicode字符集。
连接池优化
Go的sql.DB对象内置连接池,需合理配置以提升性能:
db.SetMaxOpenConns(100) // 最大打开连接数 db.SetMaxIdleConns(10) // 最大空闲连接数 db.SetConnMaxLifetime(time.Hour) // 连接最长存活时间
执行SQL操作示例
- 查询数据:
rows, err := db.Query("SELECT id, name FROM users WHERE age > ?", 18) for rows.Next() { var id int var name string rows.Scan(&id, &name) } - 插入数据:
result, err := db.Exec("INSERT INTO users(name, age) VALUES (?, ?)", "张三", 25) lastId, _ := result.LastInsertId()
错误处理与事务
- 始终检查
err,避免连接泄漏。 - 使用事务保证数据一致性:
tx, _ := db.Begin() _, err = tx.Exec("UPDATE account SET balance = balance - ? WHERE id = ?", 100, 1) if err != nil { tx.Rollback() } else { tx.Commit() }
注意事项
- 避免SQL注入:务必使用预编译占位符,而非字符串拼接。
- 资源释放:及时关闭
rows和db连接。 - 连接超时:可在DSN中添加
timeout参数控制超时时间。
通过标准库与驱动配合,Go能以简洁高效的方式操作MySQL。重点在于正确配置DSN、管理连接池并遵循预处理防注入原则,结合实际业务调整参数,可构建稳定可靠的数据层应用。
未经允许不得转载! 作者:HTML前端知识网,转载或复制请以超链接形式并注明出处HTML前端知识网。
原文地址:https://www.html4.cn/15378.html发布于:2026-09-07





