筱工具(Golang)
筱锋的 Go 语言基础组件库文档
筱工具(Golang)
筱工具(Golang) 是筱锋的 Go 语言基础组件库,基于 Gin 框架构建,为微服务提供标准化的基础设施。
特性
- 🚀 快速启动 - 基于 Gin 框架,一键启动 Web 服务
- 🏗️ 多模块分层 - 四层架构(defined / common / major / plugins),按需引入
- 📦 开箱即用 - 内置日志、配置、数据库等常用组件
- 🆔 分布式 ID - 自定义雪花算法,支持业务基因
- 📝 统一响应 - 标准化 API 响应格式
- 🔒 类型安全 - 完整的类型定义和错误处理
- 📄 分页标准化 - 内置
PageRequest/PageResponse泛型分页模型 - ▶️ 运行时托管 - 内置
xMain.Runner,统一启动与优雅关闭 - ⚡ 声明式配置 -
xOption函数式选项模式,优雅组织中间件、缓存和数据库 - 🗃️ 双后端缓存 -
xCache.Manager支持 Redis / Memory 双后端,泛型 API 零切换成本 - 🔌 gRPC 支持 - 提供
xGrpcRunner、追踪拦截器与错误包装能力 - ⏰ 定时任务 - 提供
xCron基于 robfig/cron 的定时任务插件 - 🔄 异步任务 - 提供
xAsync协程池异步执行,支持链路追踪和优雅终止 - 📧 邮件服务 - 提供
xEmail基于 go-mail 的邮件发送插件,内置多种模板
模块概览
| 模块 | 层级 | 描述 |
|---|---|---|
| 注册系统 | major | Reg 结构体、节点初始化与 Runner 运行时 |
| 声明式配置 | major | xOption 函数式选项,声明式装配缓存、数据库和路由 |
| 统一响应 | common | BaseResponse 与响应处理中间件 |
| 错误处理 | common | IError 接口与错误构造函数 |
| 雪花算法 | common | 64 位分布式 ID 生成 |
| 模型基类 | major | GORM 实体基类、软删除与分页模型 |
| 缓存系统 | major | xCache.Manager 泛型缓存,Redis + Memory 双后端 |
| 日志系统 | common | 基于 slog 的彩色日志 |
| 中间件 | major | CORS、响应处理等 |
| 验证器 | common | 自定义验证规则与中文翻译 |
| gRPC 插件 | plugins | gRPC 启动、拦截器与错误包装 |
| Cron 定时任务 | plugins | 基于 robfig/cron 的定时任务插件 |
| Async 异步任务 | plugins | 协程池异步执行,链路追踪与优雅终止 |
| Email 邮件服务 | plugins | 基于 go-mail 的 SMTP 邮件发送 |
快速开始
go get github.com/bamboo-services/bamboo-base-go/major
go get github.com/bamboo-services/bamboo-base-go/common
go get github.com/bamboo-services/bamboo-base-go/defined
go get github.com/bamboo-services/bamboo-base-go/plugins/grpc # 可选
go get github.com/bamboo-services/bamboo-base-go/plugins/async # 可选
go get github.com/bamboo-services/bamboo-base-go/plugins/cron # 可选
go get github.com/bamboo-services/bamboo-base-go/plugins/email # 可选
go mod tidy关于
make test/make vet/make proto等维护命令,请查看 快速开始 的「工具链与命令」章节。
package main
import (
"context"
"net/http"
xLog "github.com/bamboo-services/bamboo-base-go/common/log"
xMain "github.com/bamboo-services/bamboo-base-go/major/main"
xOption "github.com/bamboo-services/bamboo-base-go/major/option"
xReg "github.com/bamboo-services/bamboo-base-go/major/register"
"github.com/gin-gonic/gin"
)
func main() {
reg := xReg.Register(context.Background(), nil)
log := xLog.WithName(xLog.NamedMAIN)
xMain.Runner(reg, log, []xOption.Option{
xOption.WithRoute(func(ctx context.Context, serve *gin.Engine) {
serve.GET("/ping", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{"message": "pong"})
})
}),
})
}