# 关于 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 的源码。
