Skip to content
 
 

Repository files navigation

Goon - Go Web 项目生成器

⚠️ 重要提示:本代码完全由 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.go

使用 go install

go install github.com/RogueCultivators/goon@latest

验证安装

goon version
# 输出版本信息,确认安装成功

快速开始

方式 1: 交互式向导(推荐新手)⭐

goon init --interactive

通过问答方式配置项目:

  • 项目名称和 Go module
  • 数据库选择(PostgreSQL/MySQL/SQLite/无)
  • 认证方式(JWT/Session)
  • Docker 支持
  • 是否生成示例模块

方式 2: 5 分钟启动一个可运行的 API 服务

# 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 模式

使用 --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     # 示例模板(完整实现)⭐

基础模板 vs 示例模板

基础模板(默认):

  • 生成代码骨架,包含 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)
  • ✅ 邮箱唯一性检查
  • ✅ 统一错误处理
  • ✅ 结构化响应格式

模板变量

项目模板变量(ProjectData)

type ProjectData struct {
    ProjectName string  // 项目名称
    ModuleName  string  // Go module 名称
}

模块模板变量(ModuleData)

type ModuleData struct {
    ModuleName      string  // 模块名称(小写)
    CapitalizedName string  // 模块名称(首字母大写)
    ProjectModule   string  // 项目的 Go module 名称
}

自定义模板

  1. 在 internal/template/templates/ 目录下创建或修改 .tmpl 文件
  2. 使用 Go template 语法:{{.VariableName}}
  3. 模板会通过 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.out

开发

项目结构

goon/
├── 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

添加新的模板文件

  1. 在 internal/template/templates/project/ 或 templates/module/ 创建 .tmpl 文件
  2. 在 generator/project.go 或 generator/module.go 的 files map 中添加映射
  3. 重新构建项目

修改现有模板

直接编辑 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 依赖
  • 启动数据库服务
  • 运行数据库迁移
  • 创建必要的目录

5 分钟创建可运行的 API 服务(推荐)⭐

# 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

数据填充脚本会自动创建测试用户:

默认密码:password123

创建一个完整的用户管理模块

# 初始化项目(完整模式)
goon init userapp -m github.com/myname/userapp

cd userapp

# 添加用户模块(自动注册路由)
goon add user

# 运行项目
go mod download
go run main.go

使用 Minimal 模式快速开始

# 只生成核心文件
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/

访问 API

# 健康检查
curl http://localhost:8080/health

# 测试接口
curl http://localhost:8080/api/v1/ping

配置

配置文件

Goon 支持通过配置文件自定义默认行为。配置文件按以下优先级加载:

  1. 命令行参数(最高优先级)
  2. 项目根目录的 .goonrc.yaml
  3. 用户主目录的 .goonrc.yaml
  4. 默认配置(最低优先级)

配置文件示例

创建 .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

命令参考

goon init

初始化新的 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

添加新模块到项目(支持批量添加)。

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

生成代码(测试文件等)。

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

重命名模块及其所有引用。

goon rename <旧名称> <新名称> [选项]

选项:

  • --dry-run: 预览将要进行的更改
  • -v, --verbose: 显示详细日志

示例:

goon rename user account           # 重命名模块
goon rename old new --dry-run      # 预览更改

goon add pkg

添加功能包到项目(适用于 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

列出项目中的所有模块。

goon list [选项]

选项:

  • -v, --verbose: 显示详细信息

显示 internal 目录下的所有业务模块及其包含的文件。

goon template

模板管理命令。

goon template list [选项]

选项:

  • --type <类型>: 指定模板类型(project/module)

示例:

goon template list                 # 列出所有可用模板
goon template list --type=module   # 只列出模块模板
goon template list --type=project  # 只列出项目模板

显示所有可用的模板文件,包括基础模板和示例模板。

goon remove

删除项目中的模块。

goon remove <模块名称> [选项]

选项:

  • -f, --force: 强制删除,不要求确认
  • -v, --verbose: 显示详细日志

示例:

goon remove user
goon remove product --force

goon version

显示版本信息。

goon version

显示 Goon 的版本、构建信息和 Git 提交哈希。

全局选项

所有命令都支持以下全局选项:

  • -v, --verbose: 显示详细日志
  • --no-color: 禁用彩色输出
  • --config <文件>: 指定配置文件路径

最佳实践

1. 推荐的项目初始化流程

新手推荐流程:

# 使用交互式向导(最简单)
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

2. 模块开发最佳实践

推荐的模块添加顺序:

# 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

3. 配置管理最佳实践

项目级配置 (.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"

4. 测试驱动开发

# 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/...

5. 版本控制最佳实践

推荐的 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

6. 性能优化建议

批量操作:

# 推荐:一次添加多个模块
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

7. 团队协作最佳实践

统一开发环境:

# 1. 团队成员克隆项目后
git clone <project-url>
cd <project>

# 2. 运行初始化脚本
./scripts/setup.sh

# 3. 启动开发环境
make dev

代码质量保证:

# 运行代码检查
make lint

# 运行所有测试
make test

# 查看测试覆盖率
make coverage

# 构建项目
make build

8. 自定义模板使用

创建自定义模板:

# 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

9. 错误处理和调试

使用详细日志:

# 启用详细日志查看执行过程
goon add user --verbose

# 禁用彩色输出(用于日志文件)
goon add user --no-color > goon.log

处理生成错误:

# 如果生成失败,检查详细错误信息
goon add user --verbose

# 使用 --dry-run 预览避免错误
goon add user --dry-run

# 检查项目结构是否正确
goon list

10. 持续集成最佳实践

项目已包含完整的 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 会自动运行测试和检查

常见问题 (FAQ)

Q: 如何更改数据库类型?

A: 编辑 config.yaml 中的 database 配置,或修改 .env 文件中的数据库连接参数。支持 PostgreSQL、MySQL 和 SQLite。

Q: 如何添加自定义中间件?

A: 在 internal/middleware/ 目录下创建新的中间件文件,然后在 internal/router/router.go 中注册:

r.Use(middleware.YourCustomMiddleware())

Q: 生成的代码可以修改吗?

A: 可以。生成的代码是起点,你可以根据需求自由修改。Goon 支持幂等性,重复运行命令不会覆盖已存在的文件。

Q: 如何自定义模板?

A: 目前模板嵌入在二进制文件中。未来版本将支持外部模板和模板市场。

Q: --example 和默认模式有什么区别?

A: 默认模式生成代码骨架(包含 TODO 注释),需要手动填充业务逻辑。--example 模式生成完整可运行的代码,包含实际字段、验证规则和 CRUD 实现。

Q: 如何处理数据库迁移?

A: 使用生成的 Makefile:

  • make migrate-up - 执行迁移
  • make migrate-down - 回滚迁移
  • make migrate-create NAME=xxx - 创建新迁移

Q: 生成的项目支持哪些 Go 版本?

A: 推荐使用 Go 1.22 或更高版本。

Q: 如何部署生成的项目?

A: 项目包含 Dockerfile 和 docker-compose.yaml,可以直接使用 Docker 部署:

docker-compose up -d

Q: 遇到 "module not found" 错误怎么办?

A: 运行 go mod download 下载依赖,或使用 go mod tidy 清理依赖。

Q: 如何启用 HTTPS?

A: 修改 cmd/server/server.go,使用 router.RunTLS() 替代 router.Run(),并提供证书文件路径。

贡献

欢迎贡献代码!请遵循以下步骤:

  1. Fork 本仓库
  2. 创建您的特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交您的更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 开启一个 Pull Request

问题反馈

如果您发现任何问题或有功能建议,请在 Issues 页面提交。

许可证

本项目采用 MIT 许可证 - 详见 LICENSE 文件

About

No description, website, or topics provided.

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages