一、为什么需要脚手架?
- 创建项目需要做很多重复工作,比如:初始化go module、安装Gin框架、创建路由模板、配置数据库等;
- 尽管有AI工具,比如cursor,trae,cline等,但是还是需要大量提示词和等待时间,比较麻烦;
- 很多著名的框架都具有脚手架工具来减轻开发工作,比如: vue-cli、react-cli等。
这时候要是有个项目生成器,能像这样:
# 一句话创建标准项目
ginGen new my-shop --module github.com/myteam/my-shop
# 再一句话加数据库支持
cd my-shop && ginGen add mysql
岂不爽歪歪?
二、手把手体验ginGen
先上效果图!
这是生成的项目结构:
my-shop/
├── cmd/
│ └── server/
│ └── main.go # 启动入口
├── configs/
│ └── config.yaml # 统一配置
├── internal/
│ ├── config/ # 配置加载
│ ├── router/ # 路由管理
│ └── repository/ # 数据层
└── go.mod
安装只要几秒钟
# 安装工具
go install https://github.com/leixiaotian1/ginGen@latest
# 检查是否成功
ginGen version
3步创建完整项目
- 生成骨架
ginGen new my-shop --module github.com/myteam/my-shop
控制台刷刷刷输出:
✅ 创建目录结构
✅ 初始化go module
✅ 安装Gin框架
✅ 生成路由模板
项目创建成功!马上开始:
cd my-shop && go run cmd/server/main.go
2. 启动试试看
cd my-shop
go run cmd/server/main.go
打开浏览器访问 http://localhost:8080/ping,已经能看到Gin的经典响应:
{"message": "pong"}
- 添加MySQL支持
ginGen add mysql
工具自动完成:
✅ 安装GORM和MySQL驱动
✅ 生成数据库配置
✅ 创建连接示例
记得修改config.yaml配置哦!
查看自动生成的configs/config.yaml,发现多了数据库配置项:
mysql:
dsn: "user:pass@tcp(localhost:3306)/dbname?charset=utf8mb4..."
三、实现原理
这个工具怎么实现的?核心就这几招:
1. 命令行(Cobra库)
// 创建命令
var newCmd = &cobra.Command{
Use: "new <项目名>",
Short: "创建新项目",
Run: func(cmd *cobra.Command, args []string) {
// 在这里搞事情
}
}
Cobra库让命令行开发变得超简单,支持:
- 自动生成帮助文档
- 参数校验
- 子命令嵌套
2. 模板引擎
项目文件其实都是模板生成的,比如main.go模板:
// templates/new/main.go.tmpl
package main
import (
"{{.ModulePath}}/internal/router"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
router.SetupRoutes(r) // 自动生成的路由
r.Run(":8080")
}
渲染时替换{{.ModulePath}}为实际包名,就像填空题一样!
3. 自动化操作
工具帮你执行各种命令:
// 自动运行go mod init
exec.Command("go", "mod", "init", modulePath).Run()
// 安装Gin
exec.Command("go", "get", "github.com/gin-gonic/gin").Run()
四、为什么说这玩意好用?
对比手动创建,优势太明显了:
| 手动创建 | 使用ginGen | |
|---|---|---|
| 创建时间 | 10分钟+ | 10秒 |
| 项目结构 | 容易出错 | 标准统一 |
| 依赖管理 | 容易遗漏 | 自动安装 |
五、未来还能更强大?
目前的mvp版本只是个开始,后续计划:
- 组件市场:Redis、Kafka、ELK日志一键集成
- 自定义模板:根据公司规范定制模板
- 智能配置:自动检测环境生成配置
- 插件系统:第三方可以开发扩展
如果你对完整代码感兴趣,我已经开源在GitHub 的仓库ginGen。欢迎Star⭐和PR,一起打造Go开发者的神兵利器!