EasyAudioEncode/docs/version.md
2025-12-25 17:01:46 +08:00

41 lines
1.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 关于 GORM 控制 AutoMigrate 节省启动时间
## 什么是 AutoMigrate
在 Go 开发中,我们经常需要修改数据库表结构。传统方式是手动编写 SQL 语句既繁琐又容易出错。GORM 的 AutoMigrate 功能应运而生,它能自动同步代码和数据库结构,让开发更高效。
## 为什么需要控制 AutoMigrate
让我们看看一个真实场景:项目初期只有 7 个表AutoMigrate 执行只需 1 秒。随着功能增加,表数量增长到 30 个,启动时间延长到 10 秒。更糟的是,即使表结构没有变化,每次启动都要重新检查所有表,这显然不合理。
## 解决方案:版本控制
goddd 引入版本控制机制,就像软件更新一样,只有在新版本发布时才需要更新。具体实现:
1. 数据库记录当前版本号
2. 程序启动时检查代码版本号
3. 仅当代码版本号大于数据库版本号时执行 AutoMigrate
## 如何修改版本?代码示例
```go
// 设置数据库版本号(0.0.2 或 v0.0.2 都可以)
versionapi.DBVersion = "0.0.2"
// 添加版本说明,记录这次更新了什么
versionapi.DBRemark = "添加了用户头像字段"
```
通过 `orm.SetEnabledAutoMigrate()` 可以全局控制 AutoMigrate 的启用状态。
## 这样做有什么好处?
1. 程序启动更快了,不用每次都检查所有表
2. 避免不必要的数据库操作,减少数据库压力
3. 可以清楚地知道每次数据库结构变更的历史
## 关于 goddd
[github.com/ixugo/goddd](https://github.com/ixugo/goddd) 是一个基于领域驱动设计(DDD)的 Go 语言项目模板,提供了完整的项目结构和最佳实践。它集成了 GORM、Gin 等常用组件,特别适合中小项目快速开始。
想了解更多?欢迎查看 goddd 的源码。