竹简文档

筱工具(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 的邮件发送插件,内置多种模板

模块概览

模块层级描述
注册系统majorReg 结构体、节点初始化与 Runner 运行时
声明式配置majorxOption 函数式选项,声明式装配缓存、数据库和路由
统一响应commonBaseResponse 与响应处理中间件
错误处理commonIError 接口与错误构造函数
雪花算法common64 位分布式 ID 生成
模型基类majorGORM 实体基类、软删除与分页模型
缓存系统majorxCache.Manager 泛型缓存,Redis + Memory 双后端
日志系统common基于 slog 的彩色日志
中间件majorCORS、响应处理等
验证器common自定义验证规则与中文翻译
gRPC 插件pluginsgRPC 启动、拦截器与错误包装
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"})
            })
        }),
    })
}

更多信息

On this page