GoWind Bootstrap · 声明式应用引导框架
配置即应用 · 一行代码启动微服务
用一份声明式配置,组装完整微服务应用——传输层、配置中心、注册发现、日志、追踪、指标、消息代理,一气呵成
中文 · English · 日本語
声明式配置驱动 :基于 Protobuf 定义的 BootstrapConfig,一份 YAML 配置即可描述完整的应用拓扑——传输层、配置中心、注册发现、日志、追踪、指标、消息代理
SPI 插件注册机制 :通过 init() + 空导入实现 Builder 自注册,零胶水代码即可扩展新组件
声明式中间件编排 :HTTP/gRPC 中间件通过配置启用和参数化,无需手写一行中间件初始化代码
三层封装,灵活切换 :从一行代码启动的全密封模式,到手写 Builder 的完全开放模式,按需选择
多模块依赖隔离 :每个适配子包独立 go.mod,用户只引入需要的适配器,不污染依赖树
Cobra 命令行集成 :内置命令行支持,通过 -c 参数指定配置文件,开箱即用
多格式配置支持 :自动识别 YAML / JSON / Protobuf 二进制格式,平滑迁移
go get github.com/tx7do/go-wind-bootstrap
config.yaml
app :
id : my-service
name : my-service
version : " 1.0.0"
env : development
server :
http :
addr : " :8080"
middleware :
recovery : {}
cors : {}
logging : {}
logger :
type : zap
zap :
level : info
format : json
main.go
package main
import (
"fmt"
"net/http"
"os"
bootstrap "github.com/tx7do/go-wind-bootstrap"
_ "github.com/tx7do/go-wind-bootstrap/log/zap"
httpAdapter "github.com/tx7do/go-wind-bootstrap/transport/http"
)
func main () {
httpAdapter .RegisterServerSetup (func (srv * httpAdapter.Server ) {
srv .GET ("/" , func (w http.ResponseWriter , r * http.Request ) {
_ , _ = fmt .Fprintf (w , "Hello, GoWind!\n " )
})
})
if err := bootstrap .RunAppWithFlags (bootstrap .NewCommandFlags ()); err != nil {
os .Exit (1 )
}
}
# 启动
go run main.go
# 指定配置文件
go run main.go -c /path/to/config.yaml
# 测试
curl http://localhost:8080
go-wind-bootstrap 的核心思想是声明式配置驱动 。应用的完整拓扑——从传输层到消息代理——全部通过一份 Protobuf 定义的 BootstrapConfig 描述。引导引擎读取配置,通过注册的 Builder 自动组装 wind.App:
BootstrapConfig → Builder Registry → wind.Option Chain → wind.App
每个适配子包通过 init() + 空导入将 Builder 注册到全局注册表。用户只需导入对应的适配器包,框架自动完成组件创建:
import (
_ "github.com/tx7do/go-wind-bootstrap/log/zap" // 注册 Zap Logger Builder
_ "github.com/tx7do/go-wind-bootstrap/transport/http" // 注册 HTTP Server Builder
_ "github.com/tx7do/go-wind-bootstrap/transport/grpc" // 注册 gRPC Server Builder
)
HTTP 和 gRPC 中间件通过配置文件的 optional 字段启用,参数也通过配置传入。无需编写初始化代码:
server :
http :
addr : " :8080"
middleware :
recovery :
stack_trace : true
cors :
allowed_origins :
- " *"
allowed_methods :
- GET
- POST
logging :
skip_paths :
- /health
request_id :
header_name : X-Request-ID
层次
API
适用场景
全密封
RunApp / RunAppWithFlags
一行代码启动,自动处理信号监听、配置加载、生命周期
半密封
BootstrapWithContext
需要访问 Context(配置、App、Cancel)进行定制
开放
Bootstrap / Run
完全手动控制每一步,适合高级场景
// 最简单:一行启动
bootstrap .RunApp ("config.yaml" )
// 带 Cobra 命令行
bootstrap .RunAppWithFlags (bootstrap .NewCommandFlags ())
bctx , err := bootstrap .BootstrapWithContext (nil , cfg )
if err != nil {
log .Fatal (err )
}
defer bctx .Cleanup ()
// 可在运行前操作 Context
fmt .Println (bctx .Config ().GetApp ().GetName ())
bctx .App ().Run (bctx )
cfg , _ := bootstrap .LoadConfigFromFile ("config.yaml" )
app , cleanup , err := bootstrap .Bootstrap (ctx , cfg )
if err != nil {
log .Fatal (err )
}
defer cleanup ()
app .Run (ctx )
graph TB
Config["BootstrapConfig<br/>YAML / JSON / Protobuf"]
Engine["Bootstrap Engine<br/>Builder Registry + Resolver"]
App["wind.App<br/>生命周期管理"]
Config -->|"加载配置"| Engine
Engine -->|"Server Builder"| Server["Server<br/>HTTP · gRPC · TCP · WebSocket · ..."]
Engine -->|"Log Builder"| Logger["Logger<br/>Zap · Zerolog · Slog · ..."]
Engine -->|"Registry Action"| Registry["Registry<br/>Consul · Etcd · Nacos · ..."]
Engine -->|"Config Action"| ConfigSrc["Config Source<br/>File · Etcd · Nacos · ..."]
Engine -->|"Tracer Builder"| Tracer["Tracer<br/>OTLP"]
Engine -->|"Metrics Builder"| Metrics["Metrics<br/>Prometheus · OTLP"]
Engine -->|"Broker Builder"| Broker["Broker<br/>Kafka · RabbitMQ · Redis · ..."]
Server --> App
Logger --> App
Registry --> App
ConfigSrc --> App
Tracer --> App
Metrics --> App
Broker --> App
Loading
类型
常量
适配器
HTTP
http
transport/http ✅
gRPC
grpc
transport/grpc ✅
HTTP/3
http3
—
GraphQL
graphql
—
SSE
sse
—
WebSocket
websocket
—
TCP
tcp
—
UDP
udp
—
KCP
kcp
—
Thrift
thrift
—
tRPC
trpc
—
WebTransport
webtransport
—
类型
常量
Zap ✅
zap
Zerolog
zerolog
Slog
slog
Logrus
logrus
Charm
charm
Phuslu
phuslu
Loki
loki
Sentry
sentry
阿里云
aliyun
腾讯云
tencent
CloudWatch
cloudwatch
类型
常量
File
file
Etcd
etcd
Nacos
nacos
Consul
consul
Apollo
apollo
Kubernetes
kubernetes
Redis
redis
Zookeeper
zookeeper
Vault
vault
Polaris
polaris
类型
常量
Consul
consul
Etcd
etcd
Nacos
nacos
Zookeeper
zookeeper
Polaris
polaris
Eureka
eureka
Kubernetes
kubernetes
ServiceComb
service_comb
类型
常量
Prometheus
prometheus
OTLP
otlp
类型
常量
Kafka
kafka
RabbitMQ
rabbitmq
Redis
redis
NATS
nats
MQTT
mqtt
Pulsar
pulsar
Azure Service Bus
azuresb
Google Pub/Sub
gcpubsub
NSQ
nsq
RocketMQ
rocketmq
SQS
sqs
STOMP
stomp
中间件
配置字段
说明
Recovery
recovery
异常恢复,可选 stack_trace
CORS
cors
跨域资源共享,支持 allowed_origins/methods/headers 等
Logging
logging
请求日志,可选 skip_paths
Request ID
request_id
请求 ID 注入,可选 header_name
Tracing
tracing
OpenTelemetry 链路追踪
Rate Limit
rate_limit
限流
Timeout
timeout
请求超时
中间件
配置字段
说明
Recovery
recovery
异常恢复
Logging
logging
请求日志
Tracing
tracing
OpenTelemetry 链路追踪
Validate
validate
请求校验
适配器提供 RegisterServerSetup 追加式注册 API,支持代码生成器和手写代码共存:
// generated_routes.go(代码生成器自动生成)
func init () {
httpAdapter .RegisterServerSetup (func (srv * httpAdapter.Server ) {
srv .GET ("/v1/users" , listUsers )
srv .POST ("/v1/users" , createUser )
})
}
// main.go(用户手写代码)
func init () {
httpAdapter .RegisterServerSetup (func (srv * httpAdapter.Server ) {
srv .GET ("/health" , healthCheck )
})
}
grpcAdapter .RegisterServiceRegistrar (func (srv * grpc.Server ) {
pb .RegisterGreeterServer (srv , & greeterService {})
})
go-wind-bootstrap/
├── conf/ # 独立 go.mod · Protobuf 配置定义
│ └── proto/bootstrap/v1/ # .proto 源文件
│ ├── bootstrap.proto # 顶层 BootstrapConfig
│ ├── app.proto # 应用元数据
│ ├── server.proto # 传输层 + 中间件配置
│ ├── config.proto # 配置中心
│ ├── registry.proto # 服务注册发现
│ ├── log.proto # 日志系统
│ ├── tracer.proto # 分布式追踪
│ ├── metrics.proto # 指标监控
│ └── broker.proto # 消息代理
├── *.go # 根 go.mod · 引导引擎核心
│ ├── bootstrap.go # 入口:Bootstrap / Run / RunApp
│ ├── builder.go # Builder 注册表(SPI)
│ ├── context.go # Context 生命周期封装
│ ├── cli.go # Cobra 命令行封装
│ ├── types.go # 组件类型常量
│ ├── server_builder.go # Server 解析器
│ ├── config_builder.go # Config 解析器
│ ├── registry_builder.go # Registry 解析器
│ ├── log_builder.go # Logger 解析器
│ ├── tracer_builder.go # Tracer 解析器
│ ├── metrics_builder.go # Metrics 解析器
│ └── broker_builder.go # Broker 解析器
├── log/zap/ # 独立 go.mod · Zap Logger 适配器
├── transport/http/ # 独立 go.mod · HTTP 适配器 + 中间件 + std driver
├── transport/grpc/ # 独立 go.mod · gRPC 适配器 + 中间件
└── _examples/
├── quickstart/ # 最简示例:一行代码启动
├── yaml_config/ # YAML 配置加载示例
└── custom_builder/ # 自定义 Builder 示例
层级
技术
说明
语言
Go 1.22+
高性能编译型语言
框架
go-wind
微服务生命周期骨架
插件
go-wind-plugins
可插拔功能模块库
配置定义
Protobuf + buf.build
声明式配置,契约优先
配置格式
YAML / JSON / Protobuf Binary
多格式自动识别
命令行
Cobra
CLI 参数解析
当内置适配器不满足需求时,可以注册自定义 Builder:
// 注册自定义 Registry Builder
bootstrap .MustRegisterRegistryAction (bootstrap .RegistryTypeConsul ,
func (ctx context.Context , appCfg * v1.App , endpoints []string ) (func (), error ) {
// 创建 Consul 注册中心...
return func () { /* cleanup */ }, nil
},
)
// 注册自定义 Broker Builder
bootstrap .MustRegisterBrokerBuilder (bootstrap .BrokerTypeKafka ,
func (ctx context.Context , cfg * v1.Broker ) (func (), error ) {
// 创建 Kafka Broker...
return func () { /* cleanup */ }, nil
},
)
MIT License