# go-wind-bootstrap
**Repository Path**: tx7do/go-wind-bootstrap
## Basic Information
- **Project Name**: go-wind-bootstrap
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2026-06-10
- **Last Updated**: 2026-06-11
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
GoWind Bootstrap · 声明式应用引导框架
配置即应用 · 一行代码启动微服务
用一份声明式配置,组装完整微服务应用——传输层、配置中心、注册发现、日志、追踪、指标、消息代理,一气呵成
中文 · English · 日本語
---
## 项目亮点
- **声明式配置驱动**:基于 Protobuf 定义的 `BootstrapConfig`,一份 YAML 配置即可描述完整的应用拓扑——传输层、配置中心、注册发现、日志、追踪、指标、消息代理
- **SPI 插件注册机制**:通过 `init()` + 空导入实现 Builder 自注册,零胶水代码即可扩展新组件
- **声明式中间件编排**:HTTP/gRPC 中间件通过配置启用和参数化,无需手写一行中间件初始化代码
- **三层封装,灵活切换**:从一行代码启动的全密封模式,到手写 Builder 的完全开放模式,按需选择
- **多模块依赖隔离**:每个适配子包独立 `go.mod`,用户只引入需要的适配器,不污染依赖树
- **Cobra 命令行集成**:内置命令行支持,通过 `-c` 参数指定配置文件,开箱即用
- **多格式配置支持**:自动识别 YAML / JSON / Protobuf 二进制格式,平滑迁移
---
## 快速开始
### 安装
```bash
go get github.com/tx7do/go-wind-bootstrap
```
### 最简示例
**config.yaml**
```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**
```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)
}
}
```
```bash
# 启动
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
```
### SPI 自注册模式
每个适配子包通过 `init()` + 空导入将 Builder 注册到全局注册表。用户只需导入对应的适配器包,框架自动完成组件创建:
```go
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 字段启用,参数也通过配置传入。无需编写初始化代码:
```yaml
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 封装
| 层次 | API | 适用场景 |
|---------|------------------------------|-----------------------------------|
| **全密封** | `RunApp` / `RunAppWithFlags` | 一行代码启动,自动处理信号监听、配置加载、生命周期 |
| **半密封** | `BootstrapWithContext` | 需要访问 `Context`(配置、App、Cancel)进行定制 |
| **开放** | `Bootstrap` / `Run` | 完全手动控制每一步,适合高级场景 |
### 全密封模式
```go
// 最简单:一行启动
bootstrap.RunApp("config.yaml")
// 带 Cobra 命令行
bootstrap.RunAppWithFlags(bootstrap.NewCommandFlags())
```
### 半密封模式
```go
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)
```
### 开放模式
```go
cfg, _ := bootstrap.LoadConfigFromFile("config.yaml")
app, cleanup, err := bootstrap.Bootstrap(ctx, cfg)
if err != nil {
log.Fatal(err)
}
defer cleanup()
app.Run(ctx)
```
---
## 架构总览
```mermaid
graph TB
Config["BootstrapConfig
YAML / JSON / Protobuf"]
Engine["Bootstrap Engine
Builder Registry + Resolver"]
App["wind.App
生命周期管理"]
Config -->|"加载配置"| Engine
Engine -->|"Server Builder"| Server["Server
HTTP · gRPC · TCP · WebSocket · ..."]
Engine -->|"Log Builder"| Logger["Logger
Zap · Zerolog · Slog · ..."]
Engine -->|"Registry Action"| Registry["Registry
Consul · Etcd · Nacos · ..."]
Engine -->|"Config Action"| ConfigSrc["Config Source
File · Etcd · Nacos · ..."]
Engine -->|"Tracer Builder"| Tracer["Tracer
OTLP"]
Engine -->|"Metrics Builder"| Metrics["Metrics
Prometheus · OTLP"]
Engine -->|"Broker Builder"| Broker["Broker
Kafka · RabbitMQ · Redis · ..."]
Server --> App
Logger --> App
Registry --> App
ConfigSrc --> App
Tracer --> App
Metrics --> App
Broker --> App
```
---
## 支持的组件
### 传输层(Server)
| 类型 | 常量 | 适配器 |
|------|------|--------|
| 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` | — |
### 日志(Logger)
| 类型 | 常量 |
|------|------|
| Zap ✅ | `zap` |
| Zerolog | `zerolog` |
| Slog | `slog` |
| Logrus | `logrus` |
| Charm | `charm` |
| Phuslu | `phuslu` |
| Loki | `loki` |
| Sentry | `sentry` |
| 阿里云 | `aliyun` |
| 腾讯云 | `tencent` |
| CloudWatch | `cloudwatch` |
### 配置中心(Config)
| 类型 | 常量 |
|------|------|
| File | `file` |
| Etcd | `etcd` |
| Nacos | `nacos` |
| Consul | `consul` |
| Apollo | `apollo` |
| Kubernetes | `kubernetes` |
| Redis | `redis` |
| Zookeeper | `zookeeper` |
| Vault | `vault` |
| Polaris | `polaris` |
### 服务注册发现(Registry)
| 类型 | 常量 |
|------|------|
| Consul | `consul` |
| Etcd | `etcd` |
| Nacos | `nacos` |
| Zookeeper | `zookeeper` |
| Polaris | `polaris` |
| Eureka | `eureka` |
| Kubernetes | `kubernetes` |
| ServiceComb | `service_comb` |
### 分布式追踪(Tracer)
| 类型 | 常量 |
|------|------|
| OTLP | `otlp` |
### 指标监控(Metrics)
| 类型 | 常量 |
|------|------|
| Prometheus | `prometheus` |
| OTLP | `otlp` |
### 消息代理(Broker)
| 类型 | 常量 |
|------|------|
| 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` |
---
## 声明式中间件
### HTTP 中间件
| 中间件 | 配置字段 | 说明 |
|--------|---------|------|
| 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` | 请求超时 |
### gRPC 中间件
| 中间件 | 配置字段 | 说明 |
|--------|---------|------|
| Recovery | `recovery` | 异常恢复 |
| Logging | `logging` | 请求日志 |
| Tracing | `tracing` | OpenTelemetry 链路追踪 |
| Validate | `validate` | 请求校验 |
---
## 路由注册
### 追加式注册(推荐)
适配器提供 `RegisterServerSetup` 追加式注册 API,支持代码生成器和手写代码共存:
```go
// generated_routes.go(代码生成器自动生成)
func init() {
httpAdapter.RegisterServerSetup(func(srv *httpAdapter.Server) {
srv.GET("/v1/users", listUsers)
srv.POST("/v1/users", createUser)
})
}
```
```go
// main.go(用户手写代码)
func init() {
httpAdapter.RegisterServerSetup(func(srv *httpAdapter.Server) {
srv.GET("/health", healthCheck)
})
}
```
### gRPC 服务注册
```go
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
当内置适配器不满足需求时,可以注册自定义 Builder:
```go
// 注册自定义 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
},
)
```
---
## 相关项目
| 项目 | 说明 |
|------|------|
| [go-wind](https://github.com/tx7do/go-wind) | 微服务生命周期骨架 |
| [go-wind-plugins](https://github.com/tx7do/go-wind-plugins) | 可插拔功能模块库 |
---
## License
[MIT License](LICENSE)