跳至内容

ArcGo 文档

ArcGo

ArcGo 是一个模块化的 Go 后端基础设施工具集。它按包组织、可按需引入,并允许包间依赖组合。

快速开始

go get github.com/DaiYuANg/arcgo/{package}

核心特性

  • 模块化组织 - 按包拆分并支持按需引入,允许包间依赖组合(如 collectionxobservabilityx
  • 类型安全 - 基于 Go 泛型与显式接口的强类型 API
  • 实验性阶段 - 当前处于快速迭代,API 与行为仍可能调整
  • 依赖可控 - 不锁定单一框架,但会按功能引入必要依赖
  • 可观测性扩展 - 通过 observabilityx 可选对接 OpenTelemetry 与 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 开始

链接