gpt4 book ai didi

go - 如何在我的 Go 源代码中找到相对导入?

转载 作者:IT王子 更新时间:2023-10-29 02:11:20 25 4
gpt4 key购买 nike

我正在尝试使用 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此类问题通常是由相关项目中的相对导入引起的。

如何在一个大型项目中找到相关的导入,以及 vendor 的依赖项?任何现有的 Go 工具都可以帮助我吗?

我目前的解决方案是抓取 grep -rn '"\./' --include=\*.go . 的输出,但速度很慢。

最佳答案

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

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

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

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

相对导入不适用于按名称引用的包,因为它们无论如何都必须在 GOPATH 中。这可能是您没有使用的包,或者 _test.go 文件中的某些内容,这些文件意味着从包目录中隐式运行。您可以单独检查测试导入,但是当它们被扩展时,它们不会被清理并以 _ 为前缀。

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

关于go - 如何在我的 Go 源代码中找到相对导入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46114587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com