首页 > 后端开发 > Golang > 正文

Golang如何连接并操作MySQL数据库 介绍database/sql标准用法

P粉602998670
发布: 2025-07-13 09:36:02
原创
963人浏览过

golang连接并操作mysql数据库的关键步骤如下:1.安装驱动包,使用go get -u github.com/go-sql-driver/mysql下载驱动,并在代码中通过import \_ "github.com/go-sql-driver/mysql"引入;2.连接数据库,使用sql.open()函数传入驱动名和连接字符串建立连接,并通过ping检查连通性;3.执行查询与插入操作,queryrow用于查询单条数据,query用于获取多条数据,exec用于执行插入语句;4.设置连接池参数,推荐配置db.setmaxopenconns、db.setmaxidleconns和db.setconnmaxlifetime优化性能。掌握这些步骤即可实现稳定可靠的数据库访问。

Golang如何连接并操作MySQL数据库 介绍database/sql标准用法

Golang连接并操作MySQL数据库,主要依赖标准库database/sql配合第三方驱动实现。常用的驱动是go-sql-driver/mysql,它实现了database/sql接口,可以满足大多数数据库操作需求。

Golang如何连接并操作MySQL数据库 介绍database/sql标准用法

下面从实际开发角度出发,介绍几个关键步骤和使用技巧。

Golang如何连接并操作MySQL数据库 介绍database/sql标准用法

安装驱动包

要让Go程序支持MySQL,首先要安装MySQL驱动:

立即学习go语言免费学习笔记(深入)”;

go get -u github.com/go-sql-driver/mysql
登录后复制

这个命令会下载并安装驱动包。之后在代码中通过import _ "github.com/go-sql-driver/mysql"引入驱动(注意前面的下划线),这样Go才会注册该驱动,后续才能使用。

Golang如何连接并操作MySQL数据库 介绍database/sql标准用法

连接数据库

连接MySQL的核心是sql.Open()函数,传入驱动名和连接字符串:

db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/dbname")
if err != nil {
    log.Fatal(err)
}
登录后复制
  • "mysql":指定使用的驱动。
  • user:password@tcp(...):格式为用户名、密码、地址等信息组成的DSN(Data Source Name)。
  • sql.Open()并不会立即建立连接,而是“懒加载”,第一次使用时才真正连接。

建议加上Ping检查是否连通:

err = db.Ping()
if err != nil {
    log.Fatal("数据库无法连接:", err)
}
登录后复制

执行查询与插入操作

查询单条数据(QueryRow)

适合用于查询一条记录的情况:

var name string
err := db.QueryRow("SELECT name FROM users WHERE id = ?", 1).Scan(&name)
if err != nil {
    log.Println("查询失败:", err)
}
fmt.Println("用户名:", name)
登录后复制
  • QueryRow()返回一个Row对象。
  • 使用.Scan()将结果映射到变量上。
  • 如果查不到数据,Scan()会报错,可以用errors.Is(err, sql.ErrNoRows)判断。

查询多条数据(Query)

如果需要获取多个结果,用Query():

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.Println("读取行失败:", err)
        continue
    }
    fmt.Println(id, name)
}
登录后复制
  • 注意要调用rows.Close()释放资源。
  • 遍历结果用Next()方法逐行处理。

插入数据(Exec)

执行INSERT语句使用Exec(),不会返回结果集:

result, err := db.Exec("INSERT INTO users (name) VALUES (?)", "Tom")
if err != nil {
    log.Fatal(err)
}

lastId, _ := result.LastInsertId()
rowCnt, _ := result.RowsAffected()
fmt.Printf("最后插入ID: %d, 受影响行数: %d\n", lastId, rowCnt)
登录后复制
  • LastInsertId()适用于自增主键。
  • RowsAffected()返回受影响的行数。

设置连接池参数(推荐配置)

默认情况下,Go的连接池可能不够灵活,可以通过设置参数来优化性能:

db.SetMaxOpenConns(10)   // 最大打开连接数
db.SetMaxIdleConns(5)    // 最大空闲连接数
db.SetConnMaxLifetime(time.Minute * 5)  // 连接最大存活时间
登录后复制

这些参数对高并发场景很重要,避免连接泄漏或频繁创建销毁带来的性能损耗。


基本上就这些常用操作了。虽然Go的标准库封装得比较底层,但结构清晰,也方便封装成更高级的工具函数或ORM层。只要理解sql.DB、Row、Rows这几个核心类型的行为,就能写出稳定可靠的数据库访问代码。

以上就是Golang如何连接并操作MySQL数据库 介绍database/sql标准用法的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号