⚠️ 重要提示:本代码完全由 AI 生成This code is completely generated by AI
基于 Cobra 和 Gin 的命令行工具,用于快速初始化和管理模块化的 Web 项目。
- 🚀 快速初始化 Gin Web 项目
- 📦 模块化架构设计(按模块分组)
- 🎨 基于 Go template 的代码生成
- 🔧 内置常用中间件(CORS、Logger、限流、认证、权限控制等)
- 🐳 Docker 和 Docker Compose 支持
- 📊 集成 SQLC 支持
- 📝 统一的响应格式
- 🗂️ 清晰的项目结构
- ⚡ 支持 minimal 模式,只生成核心文件
- 🎯 灵活的层级生成,按需选择要生成的代码层
- 🔄 自动路由注册,无需手动修改路由文件
- 🔤 智能命名转换,支持驼峰、下划线等多种命名格式
- 🔁 幂等性支持,可安全重复执行命令
- ✨ 示例代码生成,一键生成可运行的完整项目(包含 User 模块、数据库迁移、Makefile 等)
- 🎮 交互式向导,通过问答方式配置项目
- 🎨 彩色输出,支持进度条和加载动画
- 🔧 配置文件支持,自定义默认设置
- 🧪 测试生成,自动生成单元测试和集成测试
- 🔄 模块重命名,安全重命名模块及其引用
- 📋 批量操作,一次添加多个模块
- 🛡️ 安全保障,备份回滚机制和路径验证
- 📊 高测试覆盖率,80%+ 的测试覆盖率保证代码质量
- Go 1.24.0 或更高版本
- Git(用于版本控制)
- Docker 和 Docker Compose(可选,用于数据库)
git clone https://github.com/RogueCultivators/goon.git
cd goon
make build
# 或者
go build -o goon main.gogo install github.com/RogueCultivators/goon@latestgoon version
# 输出版本信息,确认安装成功goon init --interactive通过问答方式配置项目:
- 项目名称和 Go module
- 数据库选择(PostgreSQL/MySQL/SQLite/无)
- 认证方式(JWT/Session)
- Docker 支持
- 是否生成示例模块
# 1. 初始化项目(包含完整示例代码)
goon init blog --example
# 2. 进入项目目录
cd blog
# 3. 下载依赖
go mod download
# 4. 启动数据库(PostgreSQL)
docker-compose up -d
# 5. 运行数据库迁移
make migrate-up
# 6. 启动服务
go run main.go现在你可以访问:
- 健康检查:
http://localhost:8080/health - 用户列表:
http://localhost:8080/api/v1/user - 创建用户:
POST http://localhost:8080/api/v1/user
生成的示例包含:
- ✅ 完整的 User CRUD API(带分页、搜索、验证)
- ✅ PostgreSQL 数据库集成
- ✅ 数据库迁移文件
- ✅ Makefile 开发工具链
- ✅ Docker Compose 配置(开发环境)
- ✅ 环境变量配置示例
- ✅ 初始化脚本(scripts/setup.sh)
- ✅ 数据填充脚本(scripts/seed.sh)
- ✅ API 文档模板(docs/api.md)
# 交互式向导(推荐新手)⭐
goon init --interactive
# 完整模式(包含所有功能包)
goon init myproject
# 示例模式(生成可运行的完整项目)⭐ 推荐
goon init myproject --example
# Minimal 模式(只生成核心文件)
goon init myproject --minimal
# 指定 Go module 名称
goon init myproject -m github.com/username/myproject可选参数:
-i, --interactive: 交互式向导模式,通过问答配置项目 ⭐ 推荐新手使用-m, --module: 指定 Go module 名称(默认使用项目名称)--example: 生成包含完整实现的示例代码(User 模块 + 数据库迁移 + Makefile)⭐ 推荐新手使用--minimal: 只生成核心文件和目录(响应、日志、错误处理等)
幂等性支持:可以安全地重复运行 goon init 命令,已存在的文件会被跳过,不会被覆盖。
cd myproject
# 生成完整模块(handler, service, model, repository, schema)
goon add user
# 生成包含完整实现的示例代码 ⭐ 推荐
goon add product --example
# 只生成指定的层
goon add order --layers=handler,service
# 生成模块但不自动注册路由
goon add payment --register=false
# 支持多种命名格式(自动转换)
goon add userProfile # 生成 user_profile 目录
goon add user-management # 生成 user_management 目录可选参数:
-l, --layers: 指定要生成的层,可选值:handler, service, model, repository, schema, routes--example: 生成包含完整实现的示例代码(包含实际字段、验证规则、业务逻辑)⭐ 推荐--register: 是否自动在 router.go 中注册路由(默认为 true)
生成的文件位于 internal/[module_name]/ 目录:
handler.go- HTTP 处理器service.go- 业务逻辑层model.go- 数据模型(GORM)repository.go- 数据访问层schema.go- 请求/响应结构体routes.go- 路由注册
基础模板 vs 示例模板:
- 基础模板(默认):生成代码骨架,包含 TODO 注释,需要手动填充业务逻辑
- 示例模板(--example):生成完整可运行的代码,包含实际字段、验证规则、CRUD 实现
幂等性支持:可以安全地重复运行 goon add 命令,已存在的文件会被跳过,不会被覆盖。这对于补充生成缺失的层非常有用。
自动路由注册:默认情况下,goon add 会自动在 internal/router/router.go 中注册模块路由,包括标准的 CRUD 端点。
myproject/
├── cmd/
│ └── server/
│ └── server.go # 服务器启动逻辑
├── internal/
│ ├── config/
│ │ └── config.go # 配置管理
│ ├── middleware/
│ │ ├── cors.go # CORS 中间件
│ │ ├── logger.go # 日志中间件
│ │ ├── requestid.go # 请求 ID 中间件
│ │ ├── ratelimit.go # 限流中间件
│ │ ├── auth.go # 认证中间件
│ │ ├── permission.go # 权限中间件
│ │ └── gzip.go # Gzip 压缩中间件
│ ├── router/
│ │ └── router.go # 路由配置
│ ├── sqlc/
│ │ ├── queries/ # SQLC 查询文件
│ │ └── schema/ # 数据库 schema
│ └── [module]/ # 业务模块
│ ├── handler.go
│ ├── service.go
│ ├── model.go
│ ├── repository.go
│ └── schema.go
├── pkg/
│ ├── response/
│ │ └── response.go # 统一响应格式
│ ├── logger/
│ │ └── logger.go # 日志工具
│ ├── errors/
│ │ └── errors.go # 错误处理
│ ├── validator/
│ │ └── validator.go # 数据验证
│ ├── database/
│ │ └── database.go # 数据库连接
│ ├── jwt/
│ │ └── jwt.go # JWT 工具
│ ├── utils/
│ │ └── utils.go # 通用工具
│ ├── cache/
│ │ └── cache.go # 缓存工具
│ ├── email/
│ │ └── email.go # 邮件发送
│ ├── upload/
│ │ └── upload.go # 文件上传
│ ├── pagination/
│ │ └── pagination.go # 分页工具
│ └── testutil/
│ └── testutil.go # 测试工具
├── scripts/
│ ├── setup.sh # 项目初始化脚本
│ └── seed.sh # 数据填充脚本
├── docs/
│ └── api.md # API 文档
├── migrations/ # 数据库迁移文件
├── config.yaml # 配置文件
├── .env.example # 环境变量示例
├── Makefile # 开发工具链
├── docker-compose.dev.yml # 开发环境
├── docker-compose.yaml # 生产环境
├── Dockerfile # Docker 镜像
├── sqlc.yaml # SQLC 配置
├── go.mod
└── main.go
使用 --minimal 选项时,只生成核心文件:
myproject/
├── cmd/
│ └── server/
│ └── server.go
├── internal/
│ ├── config/
│ │ └── config.go
│ ├── middleware/
│ │ ├── cors.go
│ │ └── logger.go
│ ├── router/
│ │ └── router.go
│ └── [module]/ # 通过 goon add 添加
├── pkg/
│ ├── response/
│ │ └── response.go
│ ├── logger/
│ │ └── logger.go
│ └── errors/
│ └── errors.go
├── config.yaml
├── go.mod
└── main.go
所有模板文件位于 internal/template/templates/ 目录:
internal/template/templates/
├── project/ # 项目初始化模板
│ ├── main.go.tmpl
│ ├── server.go.tmpl
│ ├── config.go.tmpl
│ ├── database.go.tmpl
│ ├── Makefile.tmpl
│ ├── .env.example.tmpl
│ └── ...
└── module/ # 模块生成模板
├── handler.go.tmpl # 基础模板(骨架代码)
├── service.go.tmpl
├── model.go.tmpl
├── repository.go.tmpl
├── schema.go.tmpl
├── routes.go.tmpl
├── handler_example.go.tmpl # 示例模板(完整实现)⭐
├── service_example.go.tmpl # 示例模板(完整实现)⭐
├── model_example.go.tmpl # 示例模板(完整实现)⭐
├── repository_example.go.tmpl # 示例模板(完整实现)⭐
└── schema_example.go.tmpl # 示例模板(完整实现)⭐
基础模板(默认):
- 生成代码骨架,包含 TODO 注释
- 适合有经验的开发者,需要手动填充业务逻辑
- 文件名:
handler.go.tmpl,service.go.tmpl等
示例模板(--example):
- 生成完整可运行的代码
- 包含实际字段定义(ID, Name, Email, Password, Status, CreatedAt, UpdatedAt)
- 包含数据验证规则(email 格式、密码长度、必填字段等)
- 包含完整的 CRUD 实现(分页、搜索、排序)
- 包含错误处理和业务逻辑(密码加密、唯一性检查)
- 文件名:
handler_example.go.tmpl,service_example.go.tmpl等
示例模板包含的功能:
- ✅ GORM 模型定义(带索引、软删除)
- ✅ 请求验证(gin binding tags)
- ✅ 分页查询(page, page_size)
- ✅ 关键词搜索(LIKE 查询)
- ✅ 状态过滤
- ✅ 密码加密(bcrypt)
- ✅ 邮箱唯一性检查
- ✅ 统一错误处理
- ✅ 结构化响应格式
type ProjectData struct {
ProjectName string // 项目名称
ModuleName string // Go module 名称
}type ModuleData struct {
ModuleName string // 模块名称(小写)
CapitalizedName string // 模块名称(首字母大写)
ProjectModule string // 项目的 Go module 名称
}- 在
internal/template/templates/目录下创建或修改.tmpl文件 - 使用 Go template 语法:
{{.VariableName}} - 模板会通过
embed.FS自动嵌入到二进制文件中
示例模板:
package {{.ModuleName}}
import "{{.ProjectModule}}/pkg/response"
type Handler struct {
service *Service
}
func NewHandler(service *Service) *Handler {
return &Handler{service: service}
}Goon 自动为每个模块生成测试文件:
单元测试:
handler_test.go- Handler 层单元测试(使用 mock Service)service_test.go- Service 层单元测试(使用 mock Repository)
集成测试:
integration_test.go- 完整的端到端集成测试(使用真实数据库)
测试特性:
- 使用
testify/assert和testify/mock进行断言和 mock - 包含完整的 CRUD 测试用例
- 集成测试使用
testify/suite进行测试套件管理 - 自动设置和清理测试数据库
- 支持并发测试
运行测试:
# 运行所有测试
go test ./...
# 运行特定模块的测试
go test ./internal/user/...
# 运行单元测试(排除集成测试)
go test -short ./...
# 运行集成测试
go test -run Integration ./...
# 查看测试覆盖率
go test -cover ./...
go test -coverprofile=coverage.out ./...
go tool cover -html=coverage.outgoon/
├── cmd/ # CLI 命令
│ ├── root.go # 根命令
│ ├── init.go # init 命令
│ ├── add.go # add 命令
│ ├── pkg.go # add pkg 命令
│ ├── list.go # list 命令
│ └── remove.go # remove 命令
├── internal/
│ ├── generator/ # 代码生成器
│ │ ├── project.go # 项目生成
│ │ ├── module.go # 模块生成
│ │ ├── pkg.go # 功能包生成
│ │ └── router.go # 路由注册
│ ├── template/ # 模板系统
│ │ ├── renderer.go # 模板渲染器
│ │ └── templates/ # 模板文件
│ └── utils/ # 工具函数
│ ├── naming.go # 命名转换工具
│ └── naming_test.go # 命名转换测试
├── go.mod
└── main.go
- 在
internal/template/templates/project/或templates/module/创建.tmpl文件 - 在
generator/project.go或generator/module.go的filesmap 中添加映射 - 重新构建项目
直接编辑 internal/template/templates/ 下的 .tmpl 文件,然后重新构建。
# 1. 初始化项目
goon init blog --example
cd blog
# 2. 运行初始化脚本(自动完成所有设置)
./scripts/setup.sh
# 3. 启动服务
go run main.go初始化脚本会自动:
- 检查必要工具(Go, Docker, Docker Compose)
- 安装 Go 依赖
- 启动数据库服务
- 运行数据库迁移
- 创建必要的目录
# 1. 初始化项目(包含完整示例)
goon init blog --example
cd blog
# 2. 查看生成的文件
ls -la
# 包含:Makefile, .env.example, docker-compose.yaml, migrations/
# 3. 启动数据库
docker-compose up -d
# 4. 运行迁移
make migrate-up
# 5. 启动服务
go run main.go
# 6. 测试 API
curl http://localhost:8080/api/v1/user
curl -X POST http://localhost:8080/api/v1/user \
-H "Content-Type: application/json" \
-d '{"name":"张三","email":"[email protected]","password":"password123"}'生成的示例包含完整的 User CRUD API,支持:
- ✅ 创建用户(带密码加密)
- ✅ 获取用户列表(分页 + 搜索 + 状态过滤)
- ✅ 获取单个用户
- ✅ 更新用户信息
- ✅ 删除用户(软删除)
# 填充测试数据
./scripts/seed.sh
# 或使用 Makefile
make seed数据填充脚本会自动创建测试用户:
- 张三 ([email protected])
- 李四 ([email protected])
- 王五 ([email protected])
默认密码:password123
# 初始化项目(完整模式)
goon init userapp -m github.com/myname/userapp
cd userapp
# 添加用户模块(自动注册路由)
goon add user
# 运行项目
go mod download
go run main.go# 只生成核心文件
goon init myapp --minimal
cd myapp
# 按需添加模块
goon add auth --layers=handler,service
goon add product
# 运行项目
go mod download
go run main.go# 只生成 handler 和 service 层
goon add order --layers=handler,service
# 后续补充 repository 层(幂等性)
goon add order --layers=repository
# 生成完整模块
goon add payment# 驼峰命名
goon add userProfile
# 生成: internal/user_profile/
# 短横线命名
goon add user-management
# 生成: internal/user_management/
# 下划线命名
goon add order_history
# 生成: internal/order_history/
# PascalCase
goon add ProductCategory
# 生成: internal/product_category/# 健康检查
curl http://localhost:8080/health
# 测试接口
curl http://localhost:8080/api/v1/pingGoon 支持通过配置文件自定义默认行为。配置文件按以下优先级加载:
- 命令行参数(最高优先级)
- 项目根目录的
.goonrc.yaml - 用户主目录的
.goonrc.yaml - 默认配置(最低优先级)
创建 .goonrc.yaml 文件:
# 模板配置
templates:
custom_path: "./custom-templates" # 自定义模板路径
# 默认设置
defaults:
layers: [handler, service, model, repository, schema, routes] # 默认生成的层
auto_register: true # 是否自动注册路由
example_mode: false # 是否默认使用示例模式
# 命名风格
naming:
style: snake_case # 命名风格:snake_case, camelCase, PascalCase, kebab-case
# UI 设置
ui:
color: true # 是否启用彩色输出
progress: true # 是否显示进度条
verbose: false # 是否默认显示详细日志
# 项目设置
project:
default_module_prefix: "github.com/username" # 默认模块前缀
default_database: "postgresql" # 默认数据库类型
default_auth: "jwt" # 默认认证方式生成的项目支持环境变量配置,编辑 config.yaml 文件:
port: 8080
log_level: info
database:
host: localhost
port: 5432
user: postgres
password: ""
dbname: myapp
sslmode: disable
jwt:
secret: "your-secret-key"
expires_in: "24h"
redis:
host: localhost
port: 6379
password: ""
db: 0初始化新的 Gin Web 项目。
goon init <项目名称> [选项]
# 或
goon init --interactive选项:
-i, --interactive: 交互式向导模式,通过问答配置项目 ⭐ 推荐新手使用-m, --module <名称>: 指定 Go module 名称(默认使用项目名称)--example: 生成包含完整实现的示例代码(User 模块 + 数据库迁移 + Makefile)⭐ 推荐--minimal: 只生成核心文件和目录-v, --verbose: 显示详细日志--no-color: 禁用彩色输出
示例:
goon init --interactive # 推荐:交互式向导
goon init myapp
goon init myapp --example # 推荐:生成可运行的完整项目
goon init myapp --minimal
goon init myapp -m github.com/user/myapp添加新模块到项目(支持批量添加)。
goon add <模块名称...> [选项]选项:
-l, --layers <层列表>: 指定要生成的层,逗号分隔(handler,service,model,repository,schema,routes)--example: 生成包含完整实现的示例代码(包含实际字段、验证规则、业务逻辑)⭐ 推荐--register: 是否自动注册路由(默认为 true)--dry-run: 预览将要生成的文件,不实际创建-v, --verbose: 显示详细日志--no-color: 禁用彩色输出
示例:
goon add user
goon add product --example # 推荐:生成完整可运行的代码
goon add order --layers=handler,service
goon add payment --register=false
goon add userProfile # 支持驼峰命名
goon add user --dry-run # 预览将生成的文件
# 批量添加模块
goon add user product order # 空格分隔
goon add user,product,order # 逗号分隔生成代码(测试文件等)。
goon generate <类型> <模块名称> [选项]类型:
test: 生成测试文件
选项:
-l, --layers <层列表>: 指定要生成测试的层--all: 为所有模块生成测试-v, --verbose: 显示详细日志
示例:
goon generate test user # 为 user 模块生成测试
goon generate test product -l handler # 只生成 handler 测试
goon generate test --all # 为所有模块生成测试重命名模块及其所有引用。
goon rename <旧名称> <新名称> [选项]选项:
--dry-run: 预览将要进行的更改-v, --verbose: 显示详细日志
示例:
goon rename user account # 重命名模块
goon rename old new --dry-run # 预览更改添加功能包到项目(适用于 minimal 模式后按需添加)。
goon add pkg <包名称>可用的功能包:
validator- 数据验证database- 数据库连接jwt- JWT 认证utils- 通用工具cache- 缓存功能email- 邮件发送upload- 文件上传pagination- 分页工具testutil- 测试工具
示例:
goon add pkg cache
goon add pkg jwt
goon add pkg email列出项目中的所有模块。
goon list [选项]选项:
-v, --verbose: 显示详细信息
显示 internal 目录下的所有业务模块及其包含的文件。
模板管理命令。
goon template list [选项]选项:
--type <类型>: 指定模板类型(project/module)
示例:
goon template list # 列出所有可用模板
goon template list --type=module # 只列出模块模板
goon template list --type=project # 只列出项目模板显示所有可用的模板文件,包括基础模板和示例模板。
删除项目中的模块。
goon remove <模块名称> [选项]选项:
-f, --force: 强制删除,不要求确认-v, --verbose: 显示详细日志
示例:
goon remove user
goon remove product --force显示版本信息。
goon version显示 Goon 的版本、构建信息和 Git 提交哈希。
所有命令都支持以下全局选项:
-v, --verbose: 显示详细日志--no-color: 禁用彩色输出--config <文件>: 指定配置文件路径
新手推荐流程:
# 使用交互式向导(最简单)
goon init --interactive
# 或者直接生成完整示例项目
goon init myproject --example
cd myproject
./scripts/setup.sh # 自动设置开发环境经验开发者流程:
# 使用 minimal 模式开始
goon init myproject --minimal
cd myproject
# 按需添加功能包
goon add pkg database
goon add pkg jwt
goon add pkg cache
# 添加业务模块
goon add user --example
goon add product --layers=handler,service推荐的模块添加顺序:
# 1. 先添加核心模块(用户、认证等)
goon add user --example
goon add auth --example
# 2. 再添加业务模块
goon add product order payment
# 3. 生成测试文件
goon generate test --all
# 4. 运行测试确保代码质量
go test ./...命名规范建议:
# 推荐:使用 snake_case(会自动转换)
goon add user_profile
goon add order_history
goon add payment_method
# 或者使用 camelCase(会自动转换为 snake_case)
goon add userProfile
goon add orderHistory
goon add paymentMethod项目级配置 (.goonrc.yaml):
# 团队统一的配置
defaults:
layers: [handler, service, model, repository, schema, routes]
auto_register: true
example_mode: false
naming:
style: snake_case
ui:
color: true
progress: true个人配置 (~/.goonrc.yaml):
# 个人偏好配置
ui:
verbose: true
color: true
project:
default_module_prefix: "github.com/yourusername"# 1. 添加模块时同时生成测试
goon add user --example
goon generate test user
# 2. 运行测试确保基础功能正常
go test ./internal/user/...
# 3. 开发业务逻辑
# 编辑 internal/user/*.go 文件
# 4. 再次运行测试
go test ./internal/user/... -v
# 5. 运行集成测试
go test -run Integration ./internal/user/...推荐的 Git 工作流:
# 1. 创建功能分支
git checkout -b feature/user-module
# 2. 使用 goon 生成代码
goon add user --example
# 3. 提交生成的代码
git add .
git commit -m "feat: add user module with CRUD operations"
# 4. 开发和测试
# ... 编辑代码 ...
go test ./...
# 5. 提交最终代码
git add .
git commit -m "feat: implement user authentication and validation"
# 6. 合并到主分支
git checkout main
git merge feature/user-module批量操作:
# 推荐:一次添加多个模块
goon add user product order payment
# 而不是:
goon add user
goon add product
goon add order
goon add payment使用 --dry-run 预览:
# 预览将要生成的文件
goon add user --dry-run
goon rename old new --dry-run统一开发环境:
# 1. 团队成员克隆项目后
git clone <project-url>
cd <project>
# 2. 运行初始化脚本
./scripts/setup.sh
# 3. 启动开发环境
make dev代码质量保证:
# 运行代码检查
make lint
# 运行所有测试
make test
# 查看测试覆盖率
make coverage
# 构建项目
make build创建自定义模板:
# 1. 创建自定义模板目录
mkdir -p ./custom-templates/module
# 2. 复制并修改现有模板
cp -r internal/template/templates/module/* ./custom-templates/module/
# 3. 编辑模板文件
# 修改 ./custom-templates/module/handler.go.tmpl 等
# 4. 配置使用自定义模板
echo "templates:
custom_path: ./custom-templates" > .goonrc.yaml
# 5. 使用自定义模板生成代码
goon add mymodule使用详细日志:
# 启用详细日志查看执行过程
goon add user --verbose
# 禁用彩色输出(用于日志文件)
goon add user --no-color > goon.log处理生成错误:
# 如果生成失败,检查详细错误信息
goon add user --verbose
# 使用 --dry-run 预览避免错误
goon add user --dry-run
# 检查项目结构是否正确
goon list项目已包含完整的 CI/CD 配置:
- GitHub Actions (
.github/workflows/ci.yml) - 代码质量检查 (
.golangci.yml) - 自动化测试
- 多平台构建
- 自动发布 (
.goreleaser.yml)
本地开发流程:
# 1. 提交前检查
make lint
make test
# 2. 提交代码
git add .
git commit -m "feat: add new feature"
# 3. 推送触发 CI
git push origin feature-branch
# 4. 创建 Pull Request
# CI 会自动运行测试和检查A: 编辑 config.yaml 中的 database 配置,或修改 .env 文件中的数据库连接参数。支持 PostgreSQL、MySQL 和 SQLite。
A: 在 internal/middleware/ 目录下创建新的中间件文件,然后在 internal/router/router.go 中注册:
r.Use(middleware.YourCustomMiddleware())A: 可以。生成的代码是起点,你可以根据需求自由修改。Goon 支持幂等性,重复运行命令不会覆盖已存在的文件。
A: 目前模板嵌入在二进制文件中。未来版本将支持外部模板和模板市场。
A: 默认模式生成代码骨架(包含 TODO 注释),需要手动填充业务逻辑。--example 模式生成完整可运行的代码,包含实际字段、验证规则和 CRUD 实现。
A: 使用生成的 Makefile:
make migrate-up- 执行迁移make migrate-down- 回滚迁移make migrate-create NAME=xxx- 创建新迁移
A: 推荐使用 Go 1.22 或更高版本。
A: 项目包含 Dockerfile 和 docker-compose.yaml,可以直接使用 Docker 部署:
docker-compose up -dA: 运行 go mod download 下载依赖,或使用 go mod tidy 清理依赖。
A: 修改 cmd/server/server.go,使用 router.RunTLS() 替代 router.Run(),并提供证书文件路径。
欢迎贡献代码!请遵循以下步骤:
- Fork 本仓库
- 创建您的特性分支 (
git checkout -b feature/AmazingFeature) - 提交您的更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启一个 Pull Request
如果您发现任何问题或有功能建议,请在 Issues 页面提交。
本项目采用 MIT 许可证 - 详见 LICENSE 文件