基于go语言编辑使用的mysql数据库:从环境配置到CRUD实战

为了使我的学习更有效率,我决定把 Go 语言操作 MySQL 数据库的完整流程记录下来,包括环境配置、依赖管理、连接池使用和基础 CRUD 操作,帮你避开常见的坑,快速上手开发。

一、环境的准备与路径依赖的配置

        1:安装go环境与验证

首先确保你的 Go 环境正常(Go 1.16+ 推荐),在终端执行:

go version
# 输出类似:go version go1.26.1 windows/amd64
        2:初始化go模块

在项目根目录执行,创建go.mod文件:

go mod init backend_project
        3:安装grom与mysql驱动

GORM 是 Go 语言最流行的 ORM 库,我们用它来简化数据库操作

# 安装GORM核心库
go get gorm.io/gorm
# 安装MySQL驱动
go get gorm.io/driver/mysql

执行完后,用go mod tidy自动补全依赖并生成go.sum文件,解决你之前遇到的依赖缺失问题。

二、数据库连接配置

        1:基础连接示例
package main

import (
  "gorm.io/driver/mysql"
  "gorm.io/gorm"
  "log"
)

func main() {
  // 1. 拼接DSN(数据源名称)
  dsn := "root:你的密码@tcp(127.0.0.1:3306)/test_db?charset=utf8mb4&parseTime=True&loc=Local"
  
  // 2. 连接数据库
  db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
  if err != nil {
    log.Fatalf("数据库连接失败: %v", err)
  }
  log.Println("数据库连接成功!")
}
        2:连接池配置(生产环境必看)

为了避免连接泄漏,建议配置连接池参数:

sqlDB, err := db.DB()
if err != nil {
  log.Fatal(err)
}
// 设置最大打开连接数
sqlDB.SetMaxOpenConns(100)
// 设置最大空闲连接数
sqlDB.SetMaxIdleConns(10)
// 设置连接最大存活时间
sqlDB.SetConnMaxLifetime(300)

三、模型定义与表创建

定义一个用户表模型,GORM 会自动帮你创建表:

type User struct {
  gorm.Model        // 自带ID、CreatedAt、UpdatedAt、DeletedAt字段
  Name    string    `gorm:"size:20;not null;comment:用户名"`
  Age     int       `gorm:"comment:年龄"`
  Email   string    `gorm:"size:50;unique;comment:邮箱"`
}

func initTable(db *gorm.DB) {
  // 自动迁移表结构(不存在则创建,存在则更新字段)
  err := db.AutoMigrate(&User{})
  if err != nil {
    log.Fatalf("表创建失败: %v", err)
  }
  log.Println("用户表创建/迁移成功!")
}

四、基础 CRUD 操作实战

        1:新增数据
func createUser(db *gorm.DB) {
  user := User{
    Name:  "张三",
    Age:   20,
    Email: "zhangsan@example.com",
  }
  result := db.Create(&user)
  if result.Error != nil {
    log.Printf("新增用户失败: %v", result.Error)
    return
  }
  log.Printf("新增用户成功,ID: %d", user.ID)
}
        2:查询数据
func queryUser(db *gorm.DB) {
  var user User
  // 根据主键查询
  db.First(&user, 1)
  log.Printf("查询到用户: %+v", user)

  // 条件查询
  var users []User
  db.Where("age > ?", 18).Find(&users)
  log.Printf("18岁以上用户数量: %d", len(users))
}
        3:更新数据
func updateUser(db *gorm.DB) {
  // 单个字段更新
  db.Model(&User{}).Where("id = ?", 1).Update("age", 21)
  
  // 多字段更新
  user := User{Name: "张三改", Age: 22}
  db.Model(&user).Where("id = ?", 1).Updates(user)
}
        4:删除数据
func deleteUser(db *gorm.DB) {
  // 软删除(GORM默认)
  db.Delete(&User{}, 1)
  
  // 物理删除
  db.Unscoped().Delete(&User{}, 1)
}

五、常见问题与避坑指南

  1. 依赖缺失报错:执行go mod tidy自动补全依赖,不要手动修改go.sum文件。
  2. 连接失败:检查 MySQL 服务是否启动、DSN 中的账号密码 / 端口 / 数据库名是否正确,本地防火墙是否放行 3306 端口。
  3. 时区问题:DSN 中必须加上loc=Local,否则时间字段会出现 8 小时时差。
  4. 多 main 函数冲突:一个 Go 模块里只能有一个func main(),多个入口文件会导致编译失败。

六、总结

通过这篇文章,你已经基本掌握了 Go 语言使用 GORM 操作 MySQL 的完整流程,从环境配置、连接池设置到基础 CRUD 操作。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值