Staticcheck 是什么
Staticcheck 是 Go 的深度检查套件:以正确性系列与简化类检查为主,能发现无效比较、时间与时区用法错误、冗余代码等编译器不会报的问题。它的定位是补充官方工具覆盖不到的范围,而不是替代格式化与官方检查。
基本信息
| 检查系列 | 正确性系列,另有简化、风格与性能类检查 |
|---|---|
| 定位 | 独立的第三方静态分析工具 |
| 与官方工具的关系 | 补充 go vet 覆盖不到的范围 |
| 集成方式 | 命令行,或作为聚合器里的一个启用项 |
典型使用场景
- 排查可疑逻辑:无效比较、恒真恒假的判断
- 时间与并发用法:找出容易出错的写法
- 老代码清理:识别明显的冗余与死代码
- 流水线加严:在基础检查之后叠加一层
- 与聚合器配合:作为其中一个启用项统一运行
结果怎么排优先级
- 先处理正确性系列,它们指向潜在缺陷
- 再看简化建议,按收益决定是否采纳
- 风格类建议交给团队规范决定
- 确认误报时按编号排除并写明理由
用法
用法
staticcheck ./...
staticcheck -checks=all ./... # 全开需要审慎评估噪声
# 在聚合器中启用时,注意版本要与其他环境保持一致检查系列与关注点
| 系列 | 关注点 |
|---|---|
| 正确性类 | 无效比较、错误的时间用法、恒真条件 |
| 简化类 | 多余的类型转换、冗余代码 |
| 风格类 | 命名与写法建议 |
| 性能类 | 低效的分配与循环写法 |
在评审中怎么用
- 新增的正确性告警按阻断项处理
- 简化与风格建议标为非阻塞
- 启用的检查项与版本写进配置和文档
- 排除项按编号记录,方便定期复核
优先处理正确性系列:它们指向潜在缺陷,而不是风格偏好。
正确性系列的误报率相对低:把它当作阻断项,比要求团队关注全部检查更容易长期坚持。
在评审中的用法:把新增的正确性告警当成阻断项,简化类建议则可以标为非阻塞后续处理。
对老代码全开检查:噪声过大,团队最终会选择整体关闭。