gocyclo 主要用来检查函数的圈复杂度。圈复杂度可以参考下面的定义:
圈复杂度(Cyclomatic complexity)是一种代码复杂度的衡量标准,在 1976 年由 Thomas J. McCabe, Sr. 提出。在软件测试的概念里,圈复杂度用来衡量一个模块判定结构的复杂程度,数量上表现为线性无关的路径条数,即合理的预防错误所需测试的最少路径条数。圈复杂度大说明程序代码可能质量低且难于测试和维护,根据经验,程序的可能错误和高的圈复杂度有着很大关系。
看定义较为复杂但计算还是比较简单的,我们可以认为:
一个 if,那么函数的圈复杂度要 + 1
一个 switch 的 case,函数的圈复杂度要 + 1
一个 for 循环,圈复杂度 + 1
一个 && 或 ||,圈复杂度 + 1
在大多数语言中,若函数的圈复杂度超过了 10,那么我们就认为该函数较为复杂,需要做拆解或重构。部分场景可以使用表驱动的方式进行重构。
https://xargin.com/static-analysis/