当前位置: 首页 > news >正文

基于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 操作。

http://www.jsqmd.com/news/690248/

相关文章:

  • 基于Air8101的RTMP推流方案(开源)及应用搭建说明
  • C++ MCP网关接入提速5.8倍的关键路径:从协议解析到内存池优化的7层穿透式调优指南
  • 3个月速成模型大师!2026年大模型进阶秘籍,薪资直接翻倍!
  • ColumnTransformer:高效处理混合特征的数据预处理利器
  • 2026年Q2新余全屋整装技术要点与理性选择参考 - 优质品牌商家
  • 漫画版图文解说带你了解:黑客为什么不攻击微信和支付宝钱包?真正的原因竟然是这样?!
  • Transformer注意力掩码:原理、实现与优化实践
  • GroupKFold实战:从原理到代码,解决数据泄露的交叉验证方案
  • 量化交易提速,从行情接口开始
  • 缅甸花梨木沙发核心技术鉴别与场景适配指南:花梨木家具,刺猬紫檀沙发,大果紫檀红木茶台,大果紫檀餐桌,实力盘点! - 优质品牌商家
  • 算法训练营第十天 |80. 删除有序数组中的重复项 II
  • GCC 14 + Clang 18双编译器适配方案,从零部署C内存安全规范:5类高危函数替换清单全公开
  • 长芯微LMD9633完全P2P替代AD9633,四通道12位采样80/105/125MSPS 模数转换器ADC
  • 频率学派与贝叶斯统计:核心差异与应用场景解析
  • 快捷支付频繁风控?银联通道轻松解决
  • 目前正规的隔墙板公司价格
  • VibeVoice-Realtime-0.5B部署教程:server.log日志排查常见问题
  • VSCode 2026农业插件开发避坑清单:92%开发者踩中的MQTT QoS2离线重传陷阱,含可运行的田间断网模拟测试套件
  • 中兴光猫隐藏功能解锁指南:zteOnu工具3步获取超级权限
  • 别再乱接线了!STM32F407ZGT6连接ST-LINK与USB转TTL的保姆级图文指南(附舵机驱动)
  • 神泣纷争手游:官网下载评测 - 正版玩法深度解析
  • 半失能卧床老人护理实操分享|68岁老人日常照料全流程(附注意事项)
  • 从停机到秒级自愈:Docker 27健康探测+设备数字孪生联动实践——某汽车焊装线72小时零非计划停机实录
  • C#处理时间戳别再踩坑了!秒与毫秒转换的3个常见错误与最佳实践
  • Docker 27容器逃逸漏洞CVE-2024-3094已触发3起金融数据侧漏——紧急升级清单与热补丁验证指南(附渗透测试POC)
  • 从BJT到IGBT:一张图看懂五大功率器件怎么选(附应用场景对比)
  • DDrawCompat终极指南:让经典DirectX游戏在现代Windows系统上流畅运行的完整解决方案
  • Weka机器学习14天速成:零代码实战指南
  • 终极B站视频下载神器:5分钟搞定离线观看与批量收藏
  • 告别屏幕撕裂和亮度不均:手把手教你用ILI9341的B组命令优化显示效果