本文最后更新于 606 天前,其中的信息可能已经有所发展或是发生改变。
Issue
今天在运行 golangci-lint run 时报了标题的错误,完整的错误信息如下:
ERRO [linters context] typechecking error: # github.com/xx/xx/internal/domains/protection_product [github.com/xx/xx/internal/domains/protection_product.test]
internal/domains/protection_product/product.go:4:2: could not import "context": open : no such file or directory
Diagnosis
很明显问题并不出在 context,这是一个系统库,不可能不存在。
找了一圈 google,百度,ChatGPT 都没找到答案。
最后搜索到这个 link 类似的问题,为了快速验证,我把该包下的 test 文件注释掉,果然能够通过 lint 了。
然后经过排查,果然 test 文件存在一个较深的循环依赖调用。要解决这个循环依赖比较麻烦,所以在 test 文件的原始包名后面加上 _test
后缀,解决了问题。
By the way
上面那个报错其实是 go list 报的,golang-ci 会调用 go list。如果需要快速验证是否还存在上述报错,可以直接这么调用:
go list -e -json -compiled=false -test=true -export=true -deps=false -find=false ./... >/dev/null