示例
pkg/core/* 的每项能力配一个可运行示例。除需要真实中间件的几个
(make dev 起)外,全部离线可跑:不需要 Docker、不需要网络。
每个示例都有测试,所以 make ci 会一并验证它们。
统一跑法
make example NAME=http 等价于 go run ./examples/http。
用 HTTP 形态的示例各自带一份 config.yaml,-conf 默认指向它。
开始与基础
| 示例 | 能力 | 外部依赖 |
|---|---|---|
| config | 配置加载:tag(default/env/optional)、${VAR} 展开、环境覆盖 |
无 |
| nacos | Nacos 配置中心:框架段/服务段两个 data_id、namespace/group/鉴权(账号密码或 AK/SK)、服务段热更 | Nacos(测试用假 source) |
| errors | 错误模型:Kind → 状态码、业务 code、Wrap 不泄露细节 | 无 |
| http | 路由、handler 约定、响应封套、错误映射、中间件槽、HandleRaw |
无 |
| lifecycle | Block、Closer、配置热更、就绪门、优雅退出 |
无 |
| observability | 结构化日志、相关 id、Prometheus 指标、OpenTelemetry 链路 | 无 |
数据与集成
| 示例 | 能力 | 外部依赖 |
|---|---|---|
| database | 三驱动、? 占位符、泛型扫描、WithTx、Querier(DAO 进出事务) |
默认纯 Go SQLite |
| cache | cache-aside、并发 miss 合并(防击穿)、TTL 抖动(防雪崩)、写后失效 | Redis |
| redis | JSON 缓存读写、Lock/TryLock 分布式锁 |
Redis |
| memcache | JSON 缓存、TTL、Touch |
Memcached(测试用进程内假服务) |
| kafka | 同步/异步生产者、消费者循环、死信队列 | Kafka |
| grpc | 服务注册、客户端拨号、内置健康服务与 reflection 开关 | 无 |
| rpcx | 无 IDL 的服务注册与客户端调用 | 无 |
生产治理
| 示例 | 能力 | 外部依赖 |
|---|---|---|
| resilience | 限流、幂等、熔断(连续失败或错误率滑窗)、退避重试 | 无 |
| auth | Bearer 验签(HMAC/JWKS)、分级授权、Principal 进 ctx |
无 |
| cron | 固定周期 / cron 表达式 / 一次性任务,多副本选主每槽只跑一次 | 无(选主需 Redis) |
| feature | 功能开关:配置 / 环境变量 / 运行时 Set 三层覆盖 |
无 |
| audit | 审计日志:谁对什么做了什么、结果如何,sink 可插拔 | 无 |
| llm | 四协议互转、流式/非流式、可选重试、Jev 决策问答 | 无(httptest 假上游) |
端口占用
多数示例默认监听 :8080,所以一次只跑一个;其余用独立端口避免冲突:
| 端口 | 示例 |
|---|---|
:8080 | http · observability · lifecycle · redis · memcache · kafka · grpc · rpcx |
:8081 | auth |
:8082 | resilience |
:8083 | cache |
:8084 | cron |
:8085 | feature |
:8086 | audit |
离线验证
go test ./examples/... # 全部离线:SQLite / miniredis / kfake / 进程内 gRPC·rpcx
示例和业务代码同一套规矩
示例同样只经
pkg/core/* 访问基础设施,不直接 import 驱动库,
由 depguard 的 examples-no-drivers 强制。唯一的豁免是 kafka 测试用的
kfake——它是测试替身,不是驱动。