如何在Go源中找到相对导入?

时间:2017-09-08 10:39:40

标签: go

我试图在我的项目中使用dep,当我尝试添加依赖项时:

dep ensure -add github.com/foo/bar

我收到很多类似的错误:

ensure Solve(): No versions of github.com/foo/bar met constraints:
v1.2.3: Could not introduce github.com/foo/bar@v1.2.3, as its subpackage github.com/foo/bar 
does not contain usable Go code (*build.NoGoError).. (Package is required by (root).)

Apparently此类问题通常是由相关项目中的相对导入引起的。

如何在具有销售依赖关系的大型项目中找到相对导入?任何现有的Go工具可以帮助我吗?

我目前的解决方案是抓取grep -rn '"\./' --include=\*.go .的输出,但这种情况进展缓慢。

1 个答案:

答案 0 :(得分:1)

您可以使用go list命令查找所有导入的包。

go list -f '{{ join .Imports "\n" }}'

在内部,相对导入转换为绝对路径,并以_为前缀,因此这应显示任何包中的任何相对导入。

go list -f '{{ join .Imports "\n" }}' ./... | grep '^_'

相对导入不适用于name引用的包,因为它们必须始终位于GOPATH中。它可能是您没有使用的包,或者_test.go文件中的某些内容,意味着从包目录中隐式运行。您可以单独检查测试导入,但是在展开时,它们不会被清除并以_为前缀。

go list -f '{{ join .TestImports "\n" }}' ./... | grep '\./'