如何使用go/analysis忽略_test.go格式的测试文件?
如何使用go/analysis忽略后缀为_test.go的测试文件
分两种适用场景给出对应配置方案:
场景1:自定义开发go/analysis分析器
- 方案1:修改
analysis.Analyzer结构体配置
结构体内置RunDespiteTests布尔字段,默认值为false,当该值为false时,分析器会自动跳过测试包以及所有_test.go后缀的测试文件。如果你的分析器之前手动将该字段设为true,改回默认值即可生效。 - 方案2:在Run逻辑中主动过滤测试文件
该方式优先级高于全局配置,可控性更高,直接在分析逻辑入口遍历文件时判断后缀过滤即可,示例代码如下:
import ( "strings" "golang.org/x/tools/go/analysis" ) func run(pass *analysis.Pass) (interface{}, error) { for _, file := range pass.Files { fileName := pass.Fset.File(file.Pos()).Name() // 跳过_test.go后缀的测试文件 if strings.HasSuffix(fileName, "_test.go") { continue } // 此处写正常分析逻辑 } return nil, nil }
场景2:使用基于go/analysis的现有工具(如go vet、自定义分析器命令行)
- 方案1:命令行运行时指定分析范围,排除测试文件
直接指定要分析的非测试文件匹配规则即可,比如仅分析当前目录下普通go文件:go vet ./*.go
上述命令不会匹配_test.go后缀的文件,自然不会触发测试文件的分析逻辑。 - 方案2:使用golangci-lint等上层封装工具时,直接在工具的配置文件中,将
**/*_test.go添加到全局排除路径列表即可。
内容的提问来源于stack exchange,提问作者zsh.sec
相关产品推荐
相关产品推荐

