首页/开发/代码质量与评审速查/staticcheck:Go 深度检查套件
规范与静态检查65 条

staticcheck:Go 深度检查套件

staticcheck 提供 SA 系列(真实缺陷)与简化类检查:能发现无效比较、错误的 time 用法等编译器不报的问题,与格式检查分开对待。

Staticcheck 是什么

Staticcheck 是 Go 的深度检查套件:以正确性系列与简化类检查为主,能发现无效比较、时间与时区用法错误、冗余代码等编译器不会报的问题。它的定位是补充官方工具覆盖不到的范围,而不是替代格式化与官方检查。

基本信息

检查系列正确性系列,另有简化、风格与性能类检查
定位独立的第三方静态分析工具
与官方工具的关系补充 go vet 覆盖不到的范围
集成方式命令行,或作为聚合器里的一个启用项

典型使用场景

  • 排查可疑逻辑:无效比较、恒真恒假的判断
  • 时间与并发用法:找出容易出错的写法
  • 老代码清理:识别明显的冗余与死代码
  • 流水线加严:在基础检查之后叠加一层
  • 与聚合器配合:作为其中一个启用项统一运行

结果怎么排优先级

  • 先处理正确性系列,它们指向潜在缺陷
  • 再看简化建议,按收益决定是否采纳
  • 风格类建议交给团队规范决定
  • 确认误报时按编号排除并写明理由

用法

用法
staticcheck ./...
staticcheck -checks=all ./...   # 全开需要审慎评估噪声
# 在聚合器中启用时,注意版本要与其他环境保持一致

检查系列与关注点

系列关注点
正确性类无效比较、错误的时间用法、恒真条件
简化类多余的类型转换、冗余代码
风格类命名与写法建议
性能类低效的分配与循环写法

在评审中怎么用

  • 新增的正确性告警按阻断项处理
  • 简化与风格建议标为非阻塞
  • 启用的检查项与版本写进配置和文档
  • 排除项按编号记录,方便定期复核
优先处理正确性系列:它们指向潜在缺陷,而不是风格偏好。
正确性系列的误报率相对低:把它当作阻断项,比要求团队关注全部检查更容易长期坚持。
在评审中的用法:把新增的正确性告警当成阻断项,简化类建议则可以标为非阻塞后续处理。
对老代码全开检查:噪声过大,团队最终会选择整体关闭。

易错点

  • 对老代码全开检查:噪声过大,先跑默认集更实际
  • 把简化建议当必须:风格优化应按收益评审后再采纳
  • 与聚合器的版本不一致:同一份代码在不同环境给出不同结论
  • 把正确性告警当误报批量排除:真正的问题被一起屏蔽

数据来源与参考

  • Staticcheck 官方文档(staticcheck.dev)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌