gogen 是一个轻量级的项目生成工具,旨在从 Git 仓库或本地模板快速搭建新项目。它通过从 Git
URL(支持可选的分支指定)克隆或从本地路径复制来简化流程,并支持基本的模板变量替换。
- 从 Git 仓库(例如 GitHub、GitLab)克隆项目模板。
- 从本地目录复制模板。
- 指定 Git 分支进行克隆(可选)。
- 替换文件内容、文件名和目录名中的模板变量。
- 交互式命令行界面,带有 ANSI 彩色输出和进度跟踪。
- 支持指定项目名并跳过确认提示,便于脚本和 CI 使用。
- 通过版本命令输出嵌入的 Git 提交信息。
使用一条命令克隆模板并生成项目:
gogen --git=https://github.com/example/template --name=myproject --yes- 使用 Go:
go install github.com/qiaopengjun5162/gogen@latest
- 手动构建:
此命令会将 Git 提交哈希嵌入二进制文件中,可通过
git clone https://github.com/qiaopengjun5162/gogen.git cd gogen go build -v -ldflags "-X main.GitCommit=$(git rev-parse --short HEAD)" -o gogen .
gogen --version查看。
从 Git 仓库生成项目:
gogen --git=https://github.com/example/template --branch=main从本地模板生成项目:
gogen --local=/path/to/template不进入交互提示直接生成:
gogen --local=/path/to/template --name=myproject --yes传入自定义模板变量:
gogen --local=/path/to/template --name=myproject --var module=github.com/example/myproject --var license=MIT --yes模板变量会同时替换文件内容和路径。例如,模板文件 {{project_name}}/{{module_name}}.txt
可以生成 myproject/core.txt。
查看构建信息:
gogen --version参数:
| 参数 | 说明 |
|---|---|
--git |
模板 Git 仓库 URL。 |
--local |
本地模板目录路径。 |
--branch |
要克隆的 Git 分支;仅可与 --git 一起使用。 |
--name |
项目名,也是目标目录名。 |
--var |
key=value 形式的模板变量,可重复传入。 |
--yes, -y |
跳过确认提示。 |
--version |
输出版本信息后退出。 |
未传 --name 时,gogen 会从模板来源推导默认项目名。
project_name 是保留变量,始终来自项目名。
- Go:1.24 或更高版本(用于从源码构建)。
- Git:仅在克隆远程模板时需要。
以下是使用 Git 仓库运行 gogen 的示例:
$ gogen --git=https://github.com/example/template --name=myproject --yes
[INFO] Validating input...
[INFO] Generating project 'myproject'...
[PROGRESS] Cloning Git repository from 'https://github.com/example/template'...
[SUCCESS] Project 'myproject' generated successfully!gogen/
├── CHANGELOG.md # 版本历史
├── LICENSE # 项目许可证
├── Makefile # justfile 的兼容包装入口
├── README.md # 英文文档
├── README.zh.md # 本文件(中文文档)
├── config.go # CLI 配置和校验规则
├── files.go # 本地模板复制和变量替换
├── generator.go # 项目生成编排
├── go.mod # Go 模块文件
├── input.go # 交互式输入处理
├── justfile # 标准开发任务入口
├── main.go # CLI 入口
├── processor.go # Git 和本地模板处理器
├── logger.go # CLI 输出辅助函数
├── main_test.go # 行为测试
我们欢迎贡献!请查看 CONTRIBUTING.md 获取报告问题、提交拉取请求或改进项目的指南。
本项目采用 MIT 许可证。