在Go语言中操作MySQL数据库完成数据抽取,核心依赖于标准库的database/sql包以及MySQL驱动,通过连接数据库、执行查询语句、遍历结果集三个核心步骤即可实现基础的数据抽取功能,同时可以根据业务需求扩展批量处理、条件过滤等能力。

环境准备与依赖引入
首先需要安装MySQL的Go语言驱动,目前常用的驱动是go-sql-driver/mysql,执行以下命令完成依赖安装:
# 安装MySQL驱动 go get -u github.com/go-sql-driver/mysql
安装完成后,在代码中引入对应的包:
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
"log"
)
建立MySQL数据库连接
使用sql.Open方法创建数据库连接,连接字符串的格式为用户名:密码@tcp(数据库地址:端口)/数据库名?参数,需要注意驱动名称要填写mysql,同时建议通过Ping方法验证连接是否可用。
func initDB() (*sql.DB, error) {
// 连接字符串,替换为实际的数据库信息
dsn := "root:password@tcp(127.0.0.1:3306)/test_db?charset=utf8mb4"
db, err := sql.Open("mysql", dsn)
if err != nil {
return nil, fmt.Errorf("打开数据库连接失败: %v", err)
}
// 验证连接是否可用
if err := db.Ping(); err != nil {
db.Close()
return nil, fmt.Errorf("数据库连接验证失败: %v", err)
}
// 设置连接池参数,可根据业务调整
db.SetMaxOpenConns(10)
db.SetMaxIdleConns(5)
return db, nil
}
基础数据抽取实现
完成数据库连接后,可以通过Query方法执行查询语句,获取数据结果集,再通过Scan方法将每一行的数据映射到对应的变量中,实现数据抽取。
type User struct {
ID int
Name string
Age int
}
func queryUsers(db *sql.DB) ([]User, error) {
// 执行查询语句
rows, err := db.Query("SELECT id, name, age FROM user WHERE age > ?", 18)
if err != nil {
return nil, fmt.Errorf("查询数据失败: %v", err)
}
defer rows.Close()
var userList []User
// 遍历结果集
for rows.Next() {
var user User
// 将行数据映射到结构体字段
if err := rows.Scan(&user.ID, &user.Name, &user.Age); err != nil {
return nil, fmt.Errorf("解析行数据失败: %v", err)
}
userList = append(userList, user)
}
// 检查遍历过程中是否有错误
if err := rows.Err(); err != nil {
return nil, fmt.Errorf("遍历结果集失败: %v", err)
}
return userList, nil
}
完整调用示例
将前面的方法组合起来,完成完整的数据抽取流程,包括初始化连接、调用查询方法、处理结果和错误。
func main() {
db, err := initDB()
if err != nil {
log.Fatalf("初始化数据库失败: %v", err)
}
defer db.Close()
users, err := queryUsers(db)
if err != nil {
log.Fatalf("查询用户数据失败: %v", err)
}
fmt.Println("抽取到的用户数据:")
for _, user := range users {
fmt.Printf("ID: %d, 姓名: %s, 年龄: %dn", user.ID, user.Name, user.Age)
}
}
数据抽取注意事项
- 查询语句中的参数使用占位符?,避免SQL注入风险,不要直接拼接字符串构造查询语句。
- 结果集使用完成后要及时调用Close方法释放资源,建议使用defer语句确保执行。
- 如果抽取的数据量较大,可以分页查询,避免一次性加载过多数据导致内存占用过高。
- Scan方法的参数顺序要和查询语句的字段顺序一致,否则会出现数据映射错误。
- 生产环境中不要将数据库密码等敏感信息硬编码在代码中,建议通过配置文件或环境变量读取。
Go语言MySQL数据抽取database_sql修改时间:2026-06-30 08:09:13