ArcGo 文档
ArcGo
ArcGo 是一个模块化的 Go 后端基础设施工具集。它按包组织、可按需引入,并允许包间依赖组合。
快速开始
go get github.com/DaiYuANg/arcgo/{package}核心特性
- 模块化组织 - 按包拆分并支持按需引入,允许包间依赖组合(如
collectionx、observabilityx) - 类型安全 - 基于 Go 泛型与显式接口的强类型 API
- 实验性阶段 - 当前处于快速迭代,API 与行为仍可能调整
- 依赖可控 - 不锁定单一框架,但会按功能引入必要依赖
- 可观测性扩展 - 通过
observabilityx可选对接 OpenTelemetry 与 Prometheus
包概览
多场景可扩展的认证与鉴权抽象
泛型集合与并发安全结构
分层配置加载与校验
基于 do 的强类型模块化应用框架
进程内强类型事件总线
多框架统一强类型 HTTP 路由
结构化日志与 slog 互通
可选可观测性抽象(OTel/Prometheus)
典型组合
API 服务基线
httpx + configx + logx
模块化应用基线
dix + configx + logx
事件驱动架构
eventx + logx
数据密集型工具
collectionx + configx
代码示例
配置管理
type AppConfig struct {
Name string `validate:"required"`
Port int `validate:"required,min=1,max=65535"`
}
cfg, err := configx.LoadTErr[AppConfig](
configx.WithDotenv(),
configx.WithFiles("config.yaml"),
configx.WithEnvPrefix("APP"),
)事件总线
type UserCreated struct { ID int }
func (e UserCreated) Name() string { return "user.created" }
bus := eventx.New()
eventx.Subscribe(bus, func(ctx context.Context, evt UserCreated) error {
fmt.Println("User created:", evt.ID)
return nil
})
bus.Publish(context.Background(), UserCreated{ID: 42})HTTP 服务
s := httpx.NewServer(
httpx.WithAdapter(std.New()),
httpx.WithBasePath("/api"),
)
httpx.Get(s, "/health", func(ctx context.Context, input *struct{}) (*HealthOutput, error) {
return &HealthOutput{Body: struct{ Status string }{Status: "ok"}}, nil
})为什么选择 ArcGo?
设计哲学
ArcGo 不是重型框架,而是一组精心设计的工具库。每个包都遵循以下原则:
- 单一职责 - 每个包专注于解决一类问题
- 接口抽象 - 基于接口而非实现,易于测试和替换
- 组合优先 - 组件可组合,并可依赖共享基础包(如
collectionx/observabilityx) - 文档优先 - 完整的文档和示例代码
开始使用
选择你需要的包开始:
- 需要容器/数据辅助:从 collectionx 开始
- 需要认证/授权:从 authx 开始
- 需要配置管理:从 configx 开始
- 需要模块化应用组装和 typed 生命周期管理:从 dix 开始
- 需要事件总线:从 eventx 开始
- 需要 HTTP 路由:从 httpx 开始
- 需要日志记录:从 logx 开始
- 需要可观测性:从 observabilityx 开始