go-template

command module
v1.0.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 28, 2025 License: Apache-2.0 Imports: 1 Imported by: 0

README

go-template - 企业级 API 脚手架

Go Version Echo Version License

📖 项目简介

go-template 是一个基于 Echo + Fx 的服务模板,围绕 Clean Architecture 构建,提供完备的认证授权、数据库访问、可观测性与工程化工具链,帮助团队快速落地生产可用的 API 服务。

✨ 核心特性

  • 分层架构:业务、数据、接口职责清晰,方便扩展与测试
  • 依赖注入:通过 Uber Fx 组织组件与生命周期
  • 数据访问:集成 GORM、数据库迁移与查询封装
  • 认证与权限:内置 JWT 登录流程与 Casbin RBAC 模型
  • 工程化工具:Makefile、代码生成器、lint/test 流水线即开即用
  • 可观测性:结构化日志、健康检查、Prometheus 指标支持

🚀 快速开始

环境准备
  • Go 1.24+
  • MySQL、Redis 等可选基础设施(可在配置中关闭)
初始化项目
# 1. 安装 CLI(可在任何目录执行)
go install github.com/NSObjects/go-template/muban@latest

# 2. 使用 CLI 生成项目(无需预先下载模板仓库)
muban new -m github.com/acme/awesome-api -o ../awesome-api

# 3. 进入新项目目录并启动服务
cd ../awesome-api
make dev-setup
make run
muban CLI 命令一览
muban new

使用模板生成一个全新的项目骨架。

  • -m, --module:新项目的 Go Module 路径(必填)
  • -o, --output:生成项目的目标目录,默认使用模块名
  • -n, --name:项目展示名称,用于 README、LICENSE 等
  • -f, --force:目标目录存在时覆盖
# 最常见的项目初始化
muban new -m github.com/acme/awesome-api -o ../awesome-api

# 指定展示名称并覆盖已存在目录
muban new -m github.com/acme/awesome-api -n "Awesome API" -f
muban module

在现有仓库内生成业务模块脚手架,可选基于 OpenAPI 自动生成 service/biz/data 代码。提供 --openapi 时:

  • 未指定 --name 会一次性生成 OpenAPI 中的所有模块
  • 指定 --name 则只生成对应模块

未提供 --openapi 时会使用默认模板生成单个模块。

  • -n, --name:模块名,例如 user、article
  • --route:自定义基础路由前缀(默认根据模块名推导)
  • --openapi:OpenAPI3 文档路径或远程 URL,用于自动生成 handler 和 DTO
  • --tests:是否生成 Table-Driven 风格的测试用例(默认开启,可使用 --tests=false 关闭)
  • -f, --force:覆盖已有文件
# 使用默认模板生成 user 模块
muban module --name=user

# 基于本地 OpenAPI 生成 article 模块
muban module --name=article --openapi=doc/openapi.yaml

# 从远程 OpenAPI 文档生成模块
muban module --openapi=https://example.com/openapi.yaml

# 基于 OpenAPI 一次性生成所有模块,并跳过测试用例
muban module --openapi=doc/openapi.yaml --tests=false
muban codegen

根据错误码常量生成字符串方法或 Markdown 文档,帮助维护错误码体系。

  • -t, --type:需要处理的常量类型列表(必填,可逗号分隔)
  • -o, --output:输出文件路径
  • --doc:生成 Markdown 文档而非 Go 代码
  • --trimprefix:去除常量公共前缀
  • --tags:指定编译标签
# 为 ErrCode 生成字符串方法
muban codegen -t ErrCode -o internal/pkg/errors/code_string.go

# 生成错误码 Markdown 文档
muban codegen -t ErrCode --doc -o doc/error-code.md
muban dynamicsql

读取配置中的数据库连接,使用 GORM Gen 生成动态 SQL 查询接口。

  • --config:配置文件路径(默认 configs/config.toml
  • -t, --table:仅生成指定表(多个表使用逗号分隔)
# 使用默认配置生成基础查询接口
muban dynamicsql

# 指定自定义配置文件
muban dynamicsql --config=configs/config.local.toml

# 仅为 user 表生成查询接口
muban dynamicsql -t user
常用 Makefile 命令
命令 说明
make dev 启动热加载开发环境
make test 执行单元测试
make lint 运行 golangci-lint
make db-gen 根据数据库生成 GORM 代码
make gen-code 生成错误码和文档

🧰 生成新项目

使用 muban CLI 可以把模板复制成新的仓库:

# 在目标目录生成新项目
muban new -m github.com/acme/awesome-api -o ../awesome-api

# 自定义展示名称或覆盖目录
muban new -m github.com/acme/awesome-api \
  --name="Awesome API" \
  -o ../awesome-api \
  -f

如果你正在本仓库中开发 CLI,也可以直接运行源码:

go run ./muban -- new -m github.com/acme/awesome-api -o ../awesome-api

或者通过 Makefile 包装:

make init-project MODULE=github.com/acme/awesome-api OUTPUT=../awesome-api

📁 项目结构

go-template/
├── cmd/                # 命令入口与 FX 组合
├── configs/            # 配置文件与示例
├── doc/                # OpenAPI 等规范文件
├── internal/           # 业务代码 (api/biz/data/service)
├── scripts/            # 开发脚本
├── sql/                # 数据库迁移
├── muban/              # 项目 CLI 与代码生成器
└── Makefile            # 常用任务
API 分层说明

internal/api 目录按照 Clean Architecture 分为三层:

  • service 层:暴露 HTTP/RPC 接口,负责参数绑定、校验、错误转换以及中间件集成,只依赖 biz 层并通过响应模型向外输出数据。
  • biz 层:实现核心业务用例,组织领域服务、事务控制和跨模块协作,不直接依赖底层技术细节,而是通过接口与 data 层交互。
  • data 层:封装数据库、缓存和第三方服务访问,提供 biz 层所需的仓储实现,并统一处理连接池、重试、监控等基础能力。

🛠️ 开发建议

  • 使用 make gen-module 家族命令快速生成模块骨架
  • make lintmake test 集成到 CI/CD 中
  • 结合 doc/openapi.yaml 与代码生成器保持接口与文档一致

📄 许可证

MIT License

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
internal
log
utils
Package utils 中的上下文辅助函数已迁移至 context_support.go。
Package utils 中的上下文辅助函数已迁移至 context_support.go。
cmd

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL