news 2026/4/24 1:57:38

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于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 操作。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/24 1:57:16

X-AnyLabeling +9.5 G Medsam3全流程接入笔记

问题分析日志显示加载segment_anything_Med3模型时出现权重键缺失问题。模型检查点文件checkpoint.pt中部分权重键与模型预期结构不匹配,导致加载失败。这类问题通常由模型版本不兼容或权重文件损坏引起。解决方案检查模型版本兼容性 确认使用的segment_anything_Me…

作者头像 李华
网站建设 2026/4/24 1:50:43

IT知识库上线了,为什么员工还是只会提工单?

一、一个常见现象:知识库存在,但几乎没人用在很多企业推进IT管理升级的过程中,知识库往往被视为一个“效率工具”。企业希望通过沉淀经验,让用户可以自助解决问题,从而减少IT服务台的压力。于是,知识库上线…

作者头像 李华
网站建设 2026/4/24 1:50:19

AI大语言模型狂飙突进的技术巅峰与商业风暴

📌 前言 | AI 时代的大语言模型到底有多“大”? 自从 2018 年 GPT 系列问世之后,大语言模型(LLM)便成为人工智能领域最耀眼的明星。它们不再仅仅用来“对话”,更开始在科研、医疗、制造业乃至法律与金融等领…

作者头像 李华
网站建设 2026/4/24 1:44:39

开源入门全攻略:从环境搭建到项目贡献的完整路径

前言 作为一名刚刚踏入开源世界的新手,我曾面临过许多困惑:如何配置开发环境?如何使用Git?如何找到适合新手的开源项目?如何贡献代码?这些问题曾经让我望而却步,但通过不断探索和实践,我逐渐找到了一条清晰的开源入门路径。 今天,我将基于自己的实践经验,为大家分享一份全…

作者头像 李华