模块边界
Monorepo 模块划分
Runa 使用一个仓库、多 Go 模块。这样既保留统一架构,又能让用户按需安装能力和驱动。
模块按四层划分
内核层 github.com/duxweb/runa
传输层 route / ws / jsonrpc / 未来 grpc
能力层 cache / queue / database / storage / auth / session ...
驱动层 redis / s3 / nats / amqp / oro ...
这些依赖方向不能破坏
- 驱动可以依赖对应能力
- 能力可以依赖内核契约包
- 传输可以依赖内核契约包
- 内核不能依赖传输、能力或驱动
- route 不能写死 cache、database、session 等能力类型
- 子包不要 import
runtime
嵌套模块怎么发版
子目录模块使用 Go 标准 tag 规则:
storage/s3/v1.2.0
queue/redis/v1.2.0
observe/prometheus/v1.2.0
根模块和子模块可以独立发版,但官方模块应尽量跟随核心最新 patch,避免版本偏斜。
跨模块共享不要放 internal
跨模块共享代码不能放在 internal/,否则其他 Go 模块无法 import。需要共享时应放到公开但低层的包,例如 kernel/registry。