Go语言连接MySQL的完整指南与实践
Go语言连接MySQL主要通过database/sql标准库结合MySQL驱动(如github.com/go-sql-driver/mysql)实现,需使用go get安装驱动,然后通过sql.Open()方法建立连接,并利用db.Ping()验证连通性。关键步骤包括:导入驱动、配置DSN(数据源名称)、处理连接池设置以及执行SQL操作,以下将详细展开具体实现与注意事项。

安装与导入驱动

  1. 安装MySQL驱动
    go get -u github.com/go-sql-driver/mysql
  2. 代码中导入包
    import (
        "database/sql"
        _ "github.com/go-sql-driver/mysql"
    )

    注意:驱动以匿名方式导入,其init()函数会自动注册。

    go语言如何连接mysql,精通Go语言高效连接MySQL数据库

配置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操作示例

  1. 查询数据
    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)
    }
  2. 插入数据
    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()
    }

注意事项

  1. 避免SQL注入务必使用预编译占位符,而非字符串拼接。
  2. 资源释放:及时关闭rowsdb连接。
  3. 连接超时:可在DSN中添加timeout参数控制超时时间。

通过标准库与驱动配合,Go能以简洁高效的方式操作MySQL。重点在于正确配置DSN、管理连接池并遵循预处理防注入原则,结合实际业务调整参数,可构建稳定可靠的数据层应用。

未经允许不得转载! 作者:HTML前端知识网,转载或复制请以超链接形式并注明出处HTML前端知识网

原文地址:https://www.html4.cn/15378.html发布于:2026-09-07