appbox

package module
v1.46.0 Latest Latest
Warning

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

Go to latest
Published: Aug 16, 2026 License: MIT Imports: 34 Imported by: 0

README

go-blackbox

企业级 Go Web 应用脚手架(依赖库),开箱即用、模块热插拔——像 Spring Boot 一样: gbx new 一键生成项目 → 按需 Enable* 开启模块 → 部署即得安全基线/认证/监控/开放平台。

Go 1.21+(最低 1.21,支持升级)
Module github.com/Connorig/go-blackbox
根包 appbox
Web Iris v12
ORM GORM(PostgreSQL 内置,MySQL/Oracle/SQLite 可注册)
日志 Zap + rotatelogs
IOC gbxioc v2(Spring 式:单例/多例/具名/生命周期)
配置 Viper + 文件热更新
发布 每功能点 tag 发布,GitHub Action 自动验证 + Release

资源获取(门面模式,推荐)

业务统一通过 ppbox 门面获取已装配的资源,无需记忆各模块获取方式:

go db := appbox.DB() // *gorm.DB redis := appbox.Cache() // *cache.RedisCache mongo := appbox.MongoDB() // *mongodb.Client mq := appbox.MQ() // *rabbitmq.Connection kafka := appbox.KafkaProducer() // *kafka.Producer cron := appbox.Cron() // *cron.Cron esC := appbox.ES() // *es.Client oss := appbox.Storage() // *storage.Client inf := appbox.Influx() // *influx.Client smsC := appbox.SMS() // *sms.Client mailC := appbox.Mail() // *email.Client

  • 未启用对应模块时返回 nil(不 panic)
  • 业务自定义对象(service 等)用 gbxioc.GetBeanT(单例/多例/具名)
  • 底层模块便捷函数(cache.Get() 等)保留,门面是推荐入口

快速开始(3 分钟)

# 1. 用 CLI 生成项目(或直接引用本库)
go run github.com/Connorig/go-blackbox/cmd/gbx new -name demo-app
cd demo-app

# 2. 拉依赖并启动
go mod tidy
go run .

启动即得:

入口 说明
http://localhost:8080/health/live /health/ready 健康探针
http://localhost:8080/monitor 服务器资源监控页(内存/CPU/磁盘/负载)
POST /api/v1/login 登录签发 JWT(scope + 组织身份)
http://localhost:6060 Admin:pprof / metrics / 运行时日志级别切换

生成的骨架自带:安全基线中间件、JWT 认证、数据权限隔离、SQLite + 迁移、监控。 完整可运行示例见 examples/web-basic(全家桶)与 examples/openapi(开放平台)。

分层架构(泰山版规范)

component/   通用能力(与业务无关)
├── auth/     JWT(token 轮换/scope/组织身份)、RSA 加解密
├── error/    阿里手册 A/B/C 错误码体系 + 统一错误(自动映射 HTTP 状态)
├── security/ SQL 注入检测(17 模式)+ 日志注入防护
├── util/     工具集:CopyProperties/DeepCopy/MD5/SHA/UUID/RandomString/时间...
└── mask/     脱敏器(Phone/Email/Name/IDCard/BankCard)

framework/   框架能力(面向业务)
├── web/      webiris:中间件体系/认证/限流/SQL 防护/统一响应/Admin/健康探针
├── database/ 多实例数据源 + 迁移 + DataScope 数据权限 + 雪花/UUID + 公共 Model
├── openapi/  开放 API 网关(AppKey 签名/防重放/限流/审计,业务零加密负担)
├── thirdparty/ 出站签名客户端(HMAC/RSA/Bearer + 重试 + 错误映射)
├── circuit/  熔断器(closed/open/half-open 状态机)
├── aop/      方法级切面(@Before/@After/@Around,Service 层日志/校验/耗时)
├── monitor/  服务器资源监控(跨平台采集 + 内置页面)
├── alert/    监控告警(规则引擎 + 企微/钉钉/飞书 webhook)
├── cache/    分布式锁/防击穿/防雪崩/Redis 封装
├── mq/       RabbitMQ 状态机(自动重连/Consumer/Producer)
├── push/      SSE 实时推送 / WebSocket Hub
├── event/    事件总线(同步/异步)
├── cron/     定时任务(含单例防重入)
├── mail/     邮件(gomail 封装)
├── mongo/    MongoDB(凭据 URI/泛型 FindTyped)
├── config/   配置加载(热更新/脱敏快照)
├── log/      Zap 结构化日志(运行时级别切换)
└── lifecycle/ 生命周期与优雅关闭

cmd/gbx      代码生成 CLI:gbx new 一键生成业务项目骨架

模块文档总表(配置 / 调用 / 示例)

模块 启用/接入 关键 API 文档
Web 服务 builder.EnableWeb(timeFormat, port, level, func(app){...}) webiris.OK/Fail/RespondError API_GUIDELINES
中间件体系 app.Use(...) RequestID/AccessLog/CORS/SecurityHeaders/ErrorHandler SECURITY_GUIDELINES
限流/DoS app.Use(webiris.Limit(...), webiris.BodyLimit(...), webiris.Timeout(...)) 429 B0210 / 413 / 504 SECURITY_GUIDELINES
SQL 注入拦截 app.Use(webiris.SQLGuard()) security.IsSQLInjection() SECURITY_GUIDELINES
JWT 认证 apptoken.SetSecretKey(...) + app.Use(webiris.Auth(cfg)) GenTokenFull/VerifyToken, webiris.UserID/DataScope API_GUIDELINES
数据权限 db.Scopes(webiris.DataScope(ctx).Condition()) model.SnowflakeModel/StringIDModel/OrgFields DATABASE_STANDARDS
数据库 builder.EnableDatabase(&datasource.Config{...}) datasource.Get()/WithTx/NewMigrator DATABASE_STANDARDS
开放平台(入站) openapi.New(app, cfg) 注册式接口 api.GET/POST(handler),AppKey 签名 OPENAPI_GUIDELINES
第三方调用(出站) thirdparty.NewClient(cfg) client.Get/Post 自动签名 OPENAPI_GUIDELINES
熔断器 Config.Breaker: circuit.New(...) 失败率阈值/冷却/半开 OPENAPI_GUIDELINES
方法级 AOP aop.Around(fn, hook) Before/After/Around 装饰器 本文档下方
资源监控 monitor.Register(app, "/monitor", cfg) 页面 + /monitor/api/stats MONITOR_GUIDELINES
监控告警 alert.NewWatcher(cfg) + go watcher.Start(ctx) CPU/内存/磁盘规则 + webhook ALERT_GUIDELINES
工具集 util.CopyProperties/DeepCopy/MD5/UUID... 对标 Java commons/hutool SECURITY_GUIDELINES
代码生成 gbx new -name demo 一键生成项目骨架 本文档「快速开始」
事件总线 eventbus.New(...) Subscribe/SubscribeAll/Publish
SSE/WebSocket framework/push/sseframework/push/ws 实时推送
Cron builder.InitCronJob() + Register(name, spec, fn) 单例防重入
Redis builder.EnableCache(redisOptions) 分布式锁/防击穿
邮件 mail.NewSender(cfg) TLS/附件

AOP(面向切面,接口驱动)

Web 层:中间件即环绕切面——AccessLog(日志)、Auth(权限前置)、Limit(限流前置)、ErrorHandler(异常后置)。

Service 层:定义接口 + 实现 Aspect 接口,通过 aop.Proxy 自动拦截(对标 Spring @Aspect):

// ① 业务 Service 定义成接口(调用方只依赖接口)
type UserService interface {
    GetUser(ctx context.Context, id int64) (*User, error)
}

// ② 实现 Aspect 接口:JoinPoint 里方法名/目标对象/参数/返回值/错误/耗时全可获取
type LogAspect struct{}
func (LogAspect) Name() string { return "log" }
func (LogAspect) Before(ctx context.Context, jp *aop.JoinPoint) error {
    log.Printf("call %s params=%v", jp.Method, jp.Params)
    return nil // 返回 error 即终止调用(权限/参数校验)
}
func (LogAspect) After(ctx context.Context, jp *aop.JoinPoint) {
    log.Printf("call %s cost=%s err=%v", jp.Method, jp.Cost, jp.Err)
}

// ③ 代理实现:方法转发 + aop.Proxy 拦截(样板固定)
type userServiceProxy struct {
    inner *userServiceImpl
    aop   *aop.Proxy
}
func (p *userServiceProxy) GetUser(ctx context.Context, id int64) (*User, error) {
    var result *User
    _, err := p.aop.Invoke(ctx, "GetUser", []interface{}{ctx, id}, func() ([]interface{}, error) {
        var callErr error
        result, callErr = p.inner.GetUser(ctx, id)
        return []interface{}{result}, callErr
    })
    return result, err
}

// ④ 装配:注册切面链(洋葱模型:Before 顺序、After 逆序)
service := &userServiceProxy{
    inner: &userServiceImpl{},
    aop:   aop.NewProxy(impl, paramGuardAspect{}, LogAspect{}, authAspect{}),
}
var api UserService = service // 业务只持有接口,切面透明

JoinPoint 上下文:Method / Target(目标对象)/ Proxy / Params(可修改)/ Results / Err / Start / Cost。 切面可热插拔(proxy.AddAspects(...));函数级装饰器 aop.Before/After/Around 同步保留。

Web 层:中间件即环绕切面——AccessLog(日志)、Auth(权限前置)、Limit(限流前置)、ErrorHandler(异常后置)。

Service 层:framework/aop 函数级切面(对标 Spring @Before/@After/@Around):

// 原始方法(任意签名)
getUser := func(ctx context.Context, id int64) (*User, error) { ... }

// 前置校验:参数非法直接终止(不执行目标方法)
getUser = aop.Before(getUser, func(ctx context.Context, params []interface{}) error {
    if params[1].(int64) <= 0 { return errors.New("invalid id") }
    return nil
}).(func(context.Context, int64) (*User, error))

// 环绕切面:耗时 + 日志
getUser = aop.Around(getUser, func(ctx context.Context, params []interface{},
    next func() ([]interface{}, error)) ([]interface{}, error) {
    start := time.Now()
    results, err := next()
    log.Printf("GetUser cost=%s", time.Since(start))
    return results, err
}).(func(context.Context, int64) (*User, error))

切面可组合(Before + Around + After),签名不变,业务调用方无感知;配合 gbxioc 将装饰后的 Service 注册进容器。

热插拔模块(按需启用)

开关 能力 说明
builder.EnableWeb(...) Web 服务 核心
builder.EnableDatabase(...) / EnableDb(...) 关系数据库 PostgreSQL 内置;MySQL/Oracle 注册 Dialector
builder.EnableNamedDatabase(name, ...) 多实例数据库 并行实例,独立生命周期
builder.EnableCache(redisOptions) Redis 缓存/分布式锁 未启用时相关 API 返回明确错误
builder.EnableMongoDB(cfg) MongoDB 凭据 URI、超时 Ping
builder.EnableAdmin(:6060) Admin 服务 pprof + metrics + 日志级别 + 业务路由
builder.InitCronJob() 定时任务 SetSeeds 配合
builder.SetupToken(...) JWT 参数 过期时间/签发者
builder.EnableStaticSource(embed.FS) 静态资源 Vue 打包产物嵌入
builder.BeforeSetup / AfterSetup 生命周期钩子 数据就绪后/Web 启动前等时机
builder.OnShutdown(name, fn) 关闭钩子 逆序执行
monitor.Register(app, ...) 监控(路由级) 按路由挂载,不启用则无
openapi.New(app, ...) 开放平台(路由级) 同上

未启用的模块不初始化、不占资源——这就是「热插拔」:业务项目按需组合。

完整文档索引

全部模块的使用手册(定位/启用/API/示例/链接)见 模块使用手册

文档 内容
API_GUIDELINES.md URL/响应/错误码/分页/幂等规范
DATABASE_STANDARDS.md 建表规范/索引/公共 Model/数据权限
OPENAPI_GUIDELINES.md 开放平台签名规范/出站客户端/熔断
SECURITY_GUIDELINES.md 安全基线组合/注入防护/工具集
MONITOR_GUIDELINES.md 资源监控接入/数据结构/平台矩阵
ALERT_GUIDELINES.md 告警规则/机器人渠道/自定义
DEVELOPMENT_STANDARDS.md 泰山版开发规范(代码/命名/注释)
PROJECT_ANALYSIS.md 项目分析与升级基线
OPTIMIZATION_ROADMAP.md 功能优化路线图

版本历史(近期)

版本 内容
v1.18.0 方法级 AOP + 文档体系完善
v1.17.0 全家桶示例(一次跑通全部能力)
v1.16.0 监控告警(企微/钉钉/飞书)
v1.15.0 熔断器
v1.14.0 gbx 代码生成 CLI
v1.13.0 服务器资源监控
v1.12.0 SQL 注入防护 + DoS 中间件 + 工具集
v1.11.0 数据权限(组织/部门隔离)
v1.10.0 开放平台(网关 + 出站客户端 + 雪花/UUID)
v1.9.0 泰山版规范落地(A/B/C 错误码 + StandardModel)
v1.8.0 分层目录重构

许可证

MIT

Documentation

Index

Constants

View Source
const AfterSecond = time.Second

AfterSecond 是 Web 启动结果的观察窗口,用于同步捕获端口占用等快速失败。 该常量为兼容现有调用保留,后续会迁移为可配置的启动超时。

View Source
const Author = "Connor"

Author 作者签名。

View Source
const BannerText = `` /* 167-byte string literal not displayed */

BannerText 启动横幅(GBX 大字,Spring Boot 风格)。

View Source
const Organization = "nexaaico.com"

Organization 组织域名。

View Source
const (
	// TimeFormat 日期格式
	TimeFormat = webiris.DefaultTimeFormat
)
View Source
const Version = "1.46.0"

Version 脚手架版本(发版时与 git tag 同步更新)。

Variables

This section is empty.

Functions

func AppInfo added in v1.41.0

func AppInfo() *appInfo

AppInfo 返回业务应用信息(测试/日志用);未设置返回 nil。

func BannerString added in v1.38.0

func BannerString() string

BannerString 返回横幅文本(测试/文档用)。

func Cache added in v1.37.0

func Cache() *cache.RedisCache

Cache 获取 Redis 缓存实例;未启用返回 nil。

func Cron added in v1.37.0

func Cron() *cron.Cron

Cron 获取定时任务调度器;未启用返回 nil。

func CronJobSingle

func CronJobSingle() *cron.Cron

CronJobSingle 获取定时任务执行器实例

func DB added in v1.37.0

func DB() *gorm.DB

DB 获取数据库 GORM 句柄(查询便捷入口);未启用返回 nil。

func Datasource added in v1.37.0

func Datasource() *datasource.Instance

Datasource 获取数据库实例(事务/多实例操作入口);未启用返回 nil。

func ES added in v1.37.0

func ES() *es.Client

ES 获取 ElasticSearch 客户端;未初始化返回 nil。

func GlobalCtx

func GlobalCtx() *gbxioc.GlobalContext

GlobalCtx 获取context上下文

func GormDb

func GormDb() *gorm.DB

GormDb 获取操作数据库-Gorm实例

func HTTPClient added in v1.39.0

func HTTPClient() *httpclient.Client

HTTPClient 获取全局 HTTP 请求工具客户端;未初始化返回 nil。

func Influx added in v1.37.0

func Influx() *influx.Client

Influx 获取 InfluxDB 客户端;未初始化返回 nil。

func KafkaConsumer added in v1.37.0

func KafkaConsumer() *kafka.Consumer

KafkaConsumer 获取 Kafka 消费者;未注册返回 nil。

func KafkaProducer added in v1.37.0

func KafkaProducer() *kafka.Producer

KafkaProducer 获取 Kafka 生产者;未注册返回 nil。

func MQ added in v1.37.0

func MQ() *rabbitmq.Connection

MQ 获取 RabbitMQ 连接;未连接返回 nil。

func MQTT added in v1.39.0

func MQTT() *mqtt.Client

MQTT 获取全局 MQTT 客户端(设备网关采集);未连接返回 nil。

func Mail added in v1.37.0

func Mail() *email.Client

Mail 获取邮件客户端;未初始化返回 nil。

func MongoDB added in v1.37.0

func MongoDB() *mongodb.Client

MongoDB 获取 MongoDB 客户端;未启用返回 nil。

func MongoDb

func MongoDb() *mongodb.Client

MongoDb 获取MongoDB实例

func NamedDatasource added in v1.37.0

func NamedDatasource(name string) *datasource.Instance

NamedDatasource 获取具名数据库实例;未注册返回 nil。

func RedisCache

func RedisCache() cache.Rediser

RedisCache 获取Redis缓存实例

func SMS added in v1.37.0

func SMS() *sms.Client

SMS 获取短信客户端;未初始化返回 nil。

func Storage added in v1.37.0

func Storage() *storage.Client

Storage 获取对象存储客户端;未初始化返回 nil。

Types

type Application

type Application interface {
	// Start 执行 Builder 回调、初始化启用的组件,并等待应用退出信号。
	Start(builder func(ctx context.Context, builder *ApplicationBuild) error) error
}

Application 定义脚手架应用的启动入口。

func New

func New(options ...Option) Application

New 返回进程级 Application 单例。 当前版本保持历史单例语义,重复配置和可重入能力将在生命周期模块中统一优化。

type ApplicationBuild

type ApplicationBuild struct {

	//=========================================》 启动标识
	// 是否启动定时服务,在enableCronjob后为true,会自动start(),即开始调用定时Cron表达式函数
	IsRunningCronJob bool

	// 静态服务文件系统
	StaticFs http.FileSystem
	// 是否开启web
	IsEnableWeb bool
	// 是否开启数据库
	IsEnableDB bool
	// 是否开启redis
	IsEnableCache bool
	// 是否开始RabbitMq
	IsEnableRabbitMq bool
	// 是否开始定时任务
	IsEnableCronTask bool
	// 是否开启mongoDB
	IsEnableMongoDB bool
	// 是否开启静态服务文件
	IsEnableStaticFileServe bool
	// 是否开启日志zapLogs
	IsEnableZapLogs bool
	// contains filtered or unexported fields
}

ApplicationBuild 保存依赖项目通过 Builder 选择的组件配置和启用状态。 字段由各 Enable 方法写入,并由 Application.Start 在单线程启动阶段读取。

func (*ApplicationBuild) AfterSetup

func (app *ApplicationBuild) AfterSetup(setupFuncs ...SetupFunc) *ApplicationBuild

AfterSetup 注册 Web Ready 后回调。 回调仅在启用 Web 且发布 Ready 后执行,任一回调失败都会停止已启动的 Web 服务。

func (*ApplicationBuild) AutoConfigure added in v1.20.0

func (app *ApplicationBuild) AutoConfigure(modules *apploader.Modules, webRoutes ...func(*iris.Application)) *ApplicationBuild

AutoConfigure 按配置自动装配模块(对标 Spring Boot Auto-Configuration): 业务在 config.toml 的 [modules] 段通过 enabled 开关模块,启动时按配置启用。 配置启用的模块才会初始化;未启用不占资源(热插拔)。

覆盖模块:Log / Auth(JWT 参数)/ Web(含安全基线)/ Database / Cache / Mongo / Cron / Admin / Monitor / OpenAPI。 手动调用 Enable* 与 AutoConfigure 互补:显式代码调用优先。

用法:

type AppConfig struct {
    apploader.Modules `mapstructure:",squash"`
    Business          BusinessConfig
}
var cfg AppConfig
builder.LoadConfig(&cfg, func(l apploader.Loader) {
    l.SetConfigFileSearcher("config", ".")
    l.EnableEnvSearcher("GBX")
})
builder.AutoConfigure(&cfg.Modules, func(app *iris.Application) {
    // 业务路由(Web 启用时自动挂载,安全基线已就位)
    app.Get("/api/v1/me", handler.Me)
})

func (*ApplicationBuild) BeforeSetup

func (app *ApplicationBuild) BeforeSetup(setupFuncs ...SetupFunc) *ApplicationBuild

BeforeSetup 注册 Web 启动前回调。 回调仅在启用 Web 时执行,适合完成路由依赖检查、内存数据预热等启动前准备。

func (*ApplicationBuild) EnableAdmin added in v1.5.0

func (app *ApplicationBuild) EnableAdmin(listen ...string) *ApplicationBuild

EnableCache 启动缓存 EnableAdmin enables the standalone admin service (default :6060) with pprof diagnostics, Prometheus metrics and runtime log-level switch (POST /cl).

func (*ApplicationBuild) EnableAdminRoutes added in v1.5.0

func (app *ApplicationBuild) EnableAdminRoutes(register func(app *iris.Application)) *ApplicationBuild

EnableAdminRoutes registers business admin routes (framework APIs take precedence).

func (*ApplicationBuild) EnableCache

func (app *ApplicationBuild) EnableCache(redConfig cache.RedisOptions) *ApplicationBuild

func (*ApplicationBuild) EnableDatabase added in v1.3.0

func (app *ApplicationBuild) EnableDatabase(config *datasource.Config, models ...interface{}) *ApplicationBuild

EnableDatabase 使用统一关系数据库配置启用 GORM 数据源。 PostgreSQL 已内置,MySQL、Oracle 等数据库需要在启动前通过 datasource.RegisterDialector 注册选定驱动。

func (*ApplicationBuild) EnableDb

func (app *ApplicationBuild) EnableDb(dbConfig *datasource.PostgresConfig, models ...interface{}) *ApplicationBuild

EnableDb 启动数据库操作对象

func (*ApplicationBuild) EnableMongoDB

func (app *ApplicationBuild) EnableMongoDB(dbConfig *mongodb.MongoDBConfig) *ApplicationBuild

EnableMongoDB 配置MongoDB客户端

func (*ApplicationBuild) EnableNamedDatabase added in v1.4.0

func (app *ApplicationBuild) EnableNamedDatabase(name string, config *datasource.Config, models ...interface{}) *ApplicationBuild

EnableNamedDatabase 启用与默认实例并行的具名数据库实例。 实例会在启动期注册到 IOC 容器(名称 database:<name>),并独立接入关闭栈; 依赖方通过 datasource.GetNamed(name) 获取。

func (*ApplicationBuild) EnableStaticSource

func (app *ApplicationBuild) EnableStaticSource(file embed.FS) *ApplicationBuild

EnableStaticSource 加载web服务静态资源文件

func (*ApplicationBuild) EnableWeb

func (app *ApplicationBuild) EnableWeb(timeFormat, port, logLevel string, components webiris.PartyComponent) *ApplicationBuild

EnableWeb 启动Web服务

func (*ApplicationBuild) EnableWebWithConfig

func (app *ApplicationBuild) EnableWebWithConfig(config webiris.Config, components webiris.PartyComponent) *ApplicationBuild

EnableWebWithConfig 使用结构化配置启动 Web 服务。 该方法在保留 EnableWeb 兼容性的同时,允许依赖方设置优雅关闭超时等新增参数。 配置校验错误会在 Application.Start 阶段通过 WebIris.Run 返回并记录日志。

func (*ApplicationBuild) InitCronJob

func (app *ApplicationBuild) InitCronJob() *ApplicationBuild

InitCronJob 初始化定时任务对象,存放入IOC

func (*ApplicationBuild) InitLog

func (app *ApplicationBuild) InitLog(outDirPath, level string) *ApplicationBuild

InitLog 初始化自定义日志

func (*ApplicationBuild) LoadConfig

func (app *ApplicationBuild) LoadConfig(configStruct interface{}, loaderFun func(apploader.Loader)) error

LoadConfig 使用独立 Loader 加载配置文件和环境变量。 配置函数或读取过程失败时返回保留错误链的错误,调用方必须终止当前启动流程。

func (*ApplicationBuild) OnShutdown

func (app *ApplicationBuild) OnShutdown(name string, shutdownFunc ShutdownFunc) *ApplicationBuild

OnShutdown 注册应用退出时执行的资源关闭函数。 注册顺序应与资源初始化顺序一致,Application 会在启动失败或退出时按逆序执行。 空名称或 nil 函数会被忽略,避免把不可定位或不可执行的关闭任务带入运行阶段。

func (*ApplicationBuild) RegisterModels added in v1.31.0

func (app *ApplicationBuild) RegisterModels(models func() []interface{}) *ApplicationBuild

RegisterModels 注册业务模型提供函数: 业务项目在 model 包定义 All() 返回全部模型,main 中一行注册; EnableDatabase 开启 AutoMigrate 时,gbx 在数据库就绪后自动建表, 无需在 main 中列出全部模型或手写迁移样板。

// internal/model/all.go(业务项目)
func All() []interface{} {
    return []interface{}{&User{}, &Order{}, &Product{}}
}

// main.go
builder.EnableDatabase(&datasource.Config{Driver: ..., DSN: ..., AutoMigrate: true})
builder.RegisterModels(model.All)

func (*ApplicationBuild) SetSeeds

func (app *ApplicationBuild) SetSeeds(seedFuncs ...SetupFunc) *ApplicationBuild

SetSeeds 注册 Cron 定时任务创建回调。 至少注册一个有效回调时会自动启用 Cron,调用方无需再显式调用 InitCronJob。

func (*ApplicationBuild) SetupToken

func (app *ApplicationBuild) SetupToken(AMinute, RHour time.Duration, TokenIssuer string) *ApplicationBuild

SetupToken 设置系统token有效期

func (*ApplicationBuild) WithShutdownTimeout

func (app *ApplicationBuild) WithShutdownTimeout(timeout time.Duration) *ApplicationBuild

WithShutdownTimeout 设置应用关闭的总超时时间。 非正数恢复为默认值,避免错误配置造成无限等待或关闭流程立即超时。

type ApplicationBuilder

type ApplicationBuilder interface {
	// EnableWeb 使用兼容参数配置 Iris Web 服务。
	EnableWeb(timeFormat, port, logLevel string, components webiris.PartyComponent) *ApplicationBuild
	// EnableWebWithConfig 使用结构化配置启用 Iris Web 服务。
	EnableWebWithConfig(config webiris.Config, components webiris.PartyComponent) *ApplicationBuild
	// EnableDb 配置 PostgreSQL、GORM 和需要迁移的 Model。
	EnableDb(dbConfig *datasource.PostgresConfig, models ...interface{}) *ApplicationBuild
	// EnableDatabase 使用统一配置启用 PostgreSQL、MySQL 或已注册的其他关系数据库。
	EnableDatabase(config *datasource.Config, models ...interface{}) *ApplicationBuild
	// EnableNamedDatabase 启用与默认实例并行的具名数据库实例(多数据源场景)。
	EnableNamedDatabase(name string, config *datasource.Config, models ...interface{}) *ApplicationBuild
	// EnableAdmin enables the admin service (pprof/metrics/log-level), optional listen address.
	EnableAdmin(listen ...string) *ApplicationBuild
	// EnableAdminRoutes registers business admin routes.
	EnableAdminRoutes(register func(app *iris.Application)) *ApplicationBuild
	// EnableCache 配置 Redis 缓存客户端。
	EnableCache(redConfig cache.RedisOptions) *ApplicationBuild
	// LoadConfig 通过调用方提供的 Loader 配置读取目标结构体。
	LoadConfig(configStruct interface{}, loaderFun func(apploader.Loader)) error
	// InitLog 初始化脚手架全局日志。
	InitLog(outDirPath, level string) *ApplicationBuild
	// EnableMongoDB 配置 MongoDB 客户端。
	EnableMongoDB(dbConfig *mongodb.MongoDBConfig) *ApplicationBuild
	// InitCronJob 显式启用 Cron 调度器,保留给未使用 SetSeeds 的兼容场景。
	InitCronJob() *ApplicationBuild
	// SetupToken 配置 JWT 有效期和签发者。
	SetupToken(AMinute, RHour time.Duration, TokenIssuer string) *ApplicationBuild
	// EnableStaticSource 配置 Web 根路径使用的嵌入式静态资源。
	EnableStaticSource(file embed.FS) *ApplicationBuild
	// BeforeSetup 注册 Web 启动前回调。
	BeforeSetup(setupFuncs ...SetupFunc) *ApplicationBuild
	// AfterSetup 注册 Web Ready 后回调。
	AfterSetup(setupFuncs ...SetupFunc) *ApplicationBuild
	// SetSeeds 注册 Cron 任务创建回调并自动启用调度器。
	SetSeeds(seedFuncs ...SetupFunc) *ApplicationBuild
	// OnShutdown 注册应用退出时需要逆序执行的资源关闭函数。
	OnShutdown(name string, shutdownFunc ShutdownFunc) *ApplicationBuild
	// WithShutdownTimeout 设置全部资源共享的应用关闭期限。
	WithShutdownTimeout(timeout time.Duration) *ApplicationBuild
}

ApplicationBuilder 定义依赖项目可选择的组件和生命周期注册能力。

type Option added in v1.38.0

type Option func(*ApplicationBuild)

Option 应用构建选项。

func SetAppInfo added in v1.41.0

func SetAppInfo(name, version string) Option

SetAppInfo 设置业务应用信息(名称 + 版本),启动横幅会追加打印:

app: order-service v1.2.3

用法:

app := appbox.New(appbox.SetAppInfo("order-service", "v1.2.3"))

说明:appbox.Version 是脚手架版本(随 tag 自动维护,业务不用管); 本函数注入业务项目自身的版本,两者互不干扰。

func WithoutBanner added in v1.38.0

func WithoutBanner() Option

WithoutBanner 关闭启动横幅(生产日志干净)。

type SetupFunc

type SetupFunc = seed.SeedFunc

SetupFunc 是应用生命周期回调函数。 脚手架负责传入运行 Context、按注册顺序调用,并在错误发生时终止后续启动流程。

type ShutdownFunc

type ShutdownFunc func(context.Context) error

ShutdownFunc 定义应用退出时执行的资源关闭函数。 关闭函数必须响应传入 Context 的超时或取消,并返回资源释放过程中发生的错误。

Directories

Path Synopsis
cmd
gbx command
Command gbx 是 go-blackbox 脚手架的代码生成 CLI: 一键生成符合泰山版规范 + 安全基线的完整业务项目骨架。
Command gbx 是 go-blackbox 脚手架的代码生成 CLI: 一键生成符合泰山版规范 + 安全基线的完整业务项目骨架。
component
error
Package apperr 定义统一业务错误:HTTP 状态 + 业务码 + 消息 + 原始错误链。
Package apperr 定义统一业务错误:HTTP 状态 + 业务码 + 消息 + 原始错误链。
mask
Package masker 提供敏感字段脱敏工具。
Package masker 提供敏感字段脱敏工具。
security
Package security 提供接口前置安全防护:
Package security 提供接口前置安全防护:
examples
openapi command
examples/openapi 展示 go-blackbox v1.10 的第三方对接与开放 API 能力:
examples/openapi 展示 go-blackbox v1.10 的第三方对接与开放 API 能力:
web-basic command
examples/web-basic 展示 go-blackbox v1.17 全家桶能力的最小完整应用:
examples/web-basic 展示 go-blackbox v1.17 全家桶能力的最小完整应用:
framework
alert
Package alert 提供监控告警:轮询采集资源指标,水位超阈值时推送到 企业微信/钉钉/飞书机器人 webhook,支持连续触发确认、告警去重与恢复通知。
Package alert 提供监控告警:轮询采集资源指标,水位超阈值时推送到 企业微信/钉钉/飞书机器人 webhook,支持连续触发确认、告警去重与恢复通知。
aop
Package aop 提供轻量级方法级切面(面向切面编程),对标 Spring AOP 的 @Before / @After / @Around,用于 Service 层:
Package aop 提供轻量级方法级切面(面向切面编程),对标 Spring AOP 的 @Before / @After / @Around,用于 Service 层:
apidoc
Package apidoc 提供接口文档自动生成(对标 Springdoc/Swagger): 注册路由时自动推断文档(函数名/路径模板/动词),支持可选描述覆盖; 启动后输出 OpenAPI 3.0 定义 + 内嵌 API 浏览页面。
Package apidoc 提供接口文档自动生成(对标 Springdoc/Swagger): 注册路由时自动推断文档(函数名/路径模板/动词),支持可选描述覆盖; 启动后输出 OpenAPI 3.0 定义 + 内嵌 API 浏览页面。
audit
Package oplog 提供异步操作日志队列: 请求/业务动作日志先入内存队列,由后台消费者批量写入 Sink, 不阻塞请求链路(go-admin 内存队列思路)。
Package oplog 提供异步操作日志队列: 请求/业务动作日志先入内存队列,由后台消费者批量写入 Sink, 不阻塞请求链路(go-admin 内存队列思路)。
circuit
Package circuit 提供熔断器(参考 gobreaker/业界通用设计):
Package circuit 提供熔断器(参考 gobreaker/业界通用设计):
database/id
Package id 提供脚手架内置的 ID 生成器:雪花算法(数值型)与 UUID v4(字符串型)。
Package id 提供脚手架内置的 ID 生成器:雪花算法(数值型)与 UUID v4(字符串型)。
es
Package es 提供 ElasticSearch 集成(对标 Spring Data Elasticsearch 的 ElasticsearchOperations/Template):常用操作封装 + 原生客户端暴露。
Package es 提供 ElasticSearch 集成(对标 Spring Data Elasticsearch 的 ElasticsearchOperations/Template):常用操作封装 + 原生客户端暴露。
event
Package eventbus 提供进程内事件总线(发布/订阅)。
Package eventbus 提供进程内事件总线(发布/订阅)。
gencode
Package gencode 提供 Web 化低代码生成平台(对标 RuoYi 代码生成器): 在线查看数据库表/字段、编辑字段、同步表结构、一键生成 DDD 代码。
Package gencode 提供 Web 化低代码生成平台(对标 RuoYi 代码生成器): 在线查看数据库表/字段、编辑字段、同步表结构、一键生成 DDD 代码。
httpclient
Package httpclient 提供通用 HTTP 请求工具(零依赖 net/http): GET/POST/PUT/DELETE,支持 query 参数、表单、JSON、原始 body、自定义 header。
Package httpclient 提供通用 HTTP 请求工具(零依赖 net/http): GET/POST/PUT/DELETE,支持 query 参数、表单、JSON、原始 body、自定义 header。
influx
Package influx 提供 InfluxDB 时序数据库集成(对标 Spring Data InfluxDB 的 InfluxDBTemplate):写入/查询封装 + 原生客户端暴露。
Package influx 提供 InfluxDB 时序数据库集成(对标 Spring Data InfluxDB 的 InfluxDBTemplate):写入/查询封装 + 原生客户端暴露。
kafka
Package kafka 提供 Kafka 消息队列集成(对标 Spring Kafka 的 KafkaTemplate): 生产/消费封装 + 原生客户端暴露。
Package kafka 提供 Kafka 消息队列集成(对标 Spring Kafka 的 KafkaTemplate): 生产/消费封装 + 原生客户端暴露。
live
Package live 提供 SRS 直播流媒体对接层:
Package live 提供 SRS 直播流媒体对接层:
log
monitor
Package monitor 提供服务器资源监控组件(对标阿里云 ECS 资源监控):
Package monitor 提供服务器资源监控组件(对标阿里云 ECS 资源监控):
mq
mqtt
Package mqtt 提供 MQTT 客户端集成(设备网关采集数据场景): 连接 Broker、订阅主题、发布消息、断线自动重连(基于 paho.mqtt.golang)。
Package mqtt 提供 MQTT 客户端集成(设备网关采集数据场景): 连接 Broker、订阅主题、发布消息、断线自动重连(基于 paho.mqtt.golang)。
openapi
Package openapi 提供开放 API 入站网关:第三方通过 AppKey + 签名调用业务接口, 签名校验、时间戳窗口、nonce 防重放、每 App 限流全部由脚手架完成, 业务项目只需像注册普通路由一样注册 handler。
Package openapi 提供开放 API 入站网关:第三方通过 AppKey + 签名调用业务接口, 签名校验、时间戳窗口、nonce 防重放、每 App 限流全部由脚手架完成, 业务项目只需像注册普通路由一样注册 handler。
push/sse
Package sse 提供 Server-Sent Events 实时推送能力: 客户端通过 HTTP 长连接订阅事件,服务端按事件名定向或广播推送。
Package sse 提供 Server-Sent Events 实时推送能力: 客户端通过 HTTP 长连接订阅事件,服务端按事件名定向或广播推送。
push/ws
Package ws 提供 WebSocket 实时双向通信能力: 连接管理(Hub)、广播、业务消息回调与心跳保活。
Package ws 提供 WebSocket 实时双向通信能力: 连接管理(Hub)、广播、业务消息回调与心跳保活。
sms
Package sms 提供短信服务集成,对标阿里云短信 SendSms API: 零第三方依赖,自实现阿里云 RPC 签名(HMAC-SHA1),适配标准接口语义。
Package sms 提供短信服务集成,对标阿里云短信 SendSms API: 零第三方依赖,自实现阿里云 RPC 签名(HMAC-SHA1),适配标准接口语义。
storage
Package storage 提供对象存储集成(对标 Spring Cloud 的 OSS/对象存储抽象, 兼容 S3 协议的 MinIO/阿里云 OSS/腾讯云 COS 等):常用操作封装 + 原生客户端暴露。
Package storage 提供对象存储集成(对标 Spring Cloud 的 OSS/对象存储抽象, 兼容 S3 协议的 MinIO/阿里云 OSS/腾讯云 COS 等):常用操作封装 + 原生客户端暴露。
thirdparty
Package thirdparty 提供对接第三方系统的出站 HTTP 客户端框架。
Package thirdparty 提供对接第三方系统的出站 HTTP 客户端框架。
trace
Package trace 提供 OpenTelemetry 链路追踪集成(对标 Spring Cloud Sleuth): OTLP 导出 + 采样配置 + 便捷 Span 封装。
Package trace 提供 OpenTelemetry 链路追踪集成(对标 Spring Cloud Sleuth): OTLP 导出 + 采样配置 + 便捷 Span 封装。
web
tool

Jump to

Keyboard shortcuts

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