pilot-protocol/check-layers
GitHub: pilot-protocol/check-layers
一款通用的 Go 模块架构分层 linter,通过解析 layers.yaml 规则在 CI 中检测并阻止违反分层依赖约束的跨层 import。
Stars: 0 | Forks: 0
# check-layers
[](https://github.com/pilot-protocol/check-layers/actions/workflows/ci.yml)
[](https://codecov.io/gh/pilot-protocol/check-layers)
[](https://www.gnu.org/licenses/agpl-3.0)
通用的 Go-module 架构 linter。它会在仓库根目录读取 `layers.yaml` 文件,遍历 `go list -json ./...`,并在遇到任何违反声明的分层规则的 import 时以非零状态退出。只需将其放入任何带有 `layers.yaml` 的 Go 仓库中即可直接使用——它不包含任何特定于项目的逻辑。
## 安装
```
go install github.com/pilot-protocol/check-layers@latest
```
## 运行
在目标仓库根目录下执行:
```
check-layers # P1 + P2 only
check-layers --tests # also enforce P5 (tests stay within their layer)
```
## 规则
- **P1** — 严格向下 import:每个 Go import 的目标层必须 `≤ source layer - 1`。
- **P2** — 每层仅有单一向上接口:当目标层在 `layers.yaml` 中声明了 `public:` 时,跨层 import 只能指向这些 package 中的一个;在 `packages:` 中列出但未包含在 `public:` 中的同级 package 属于层内部 package。
- **P5** — 测试仅限在其所在层内进行(通过 `--tests` 启用)。
在 `layers.yaml` 的 `known_transitional` 中列出的已知过渡期违规将被报告为警告而非失败——这样即使在重构期间存在违规,构建也能保持通过状态。
## layers.yaml
```
layers:
- id: 0
name: stdlib
packages: []
- id: 1
name: protocol
packages:
- github.com/example/proj/pkg/protocol
public:
- github.com/example/proj/pkg/protocol
- id: 2
name: driver
packages:
- github.com/example/proj/pkg/driver
public:
- github.com/example/proj/pkg/driver
known_transitional:
- from: github.com/example/proj/internal/legacy
to: github.com/example/proj/internal/newer
```
## 许可证
AGPL-3.0-or-later。详见 [LICENSE](LICENSE)。
标签:Apache Flink, EVTX分析, Go语言, 云安全监控, 代码规范检查, 日志审计, 架构治理, 程序破解, 静态分析