我的方案是我们有许多正在开发的小项目,其中一些项目彼此依赖。我们正在尝试根据依赖关系提供一些自动化测试。例如更改包时,请确保所有依赖包都通过自己的单元测试。
所以问题是,在Go中,是否有一种方法/工具可以列出哪些包(本地工作空间)指的是给定包?
答案 0 :(得分:1)
go
工具本身包含对此的支持。来自问题:How to list installed go packages
您可以使用
go list -f "{{.ImportPath}} {{.Imports}}" ./...
列出包及其依赖项(包导入的包)。在Go工作区的src
文件夹中执行它。或
go list -f "{{.ImportPath}} {{.Deps}}" ./...
以递归方式列出包及其依赖项。
是的,这不是您想要的方向,因为您需要导入特定包的包。但您可以轻松地在上述命令的输出中搜索您的包名称。将您的包列为依赖项的行是您要查找的行;这些行的第一个“标记”将是导入包的包(带有工作空间src
文件夹的路径)。
在Unix系统上,您可以使用|grep
来过滤这些行,例如
go list -f "{{.ImportPath}} {{.Imports}}" ./... |grep yourpackage
(这也将列出包含您的包及其依赖项的行。)
示例:强>
假设您有2个包:my/pack1
和my/pack2
,其中my/pack1
不会导入任何内容,my/pack2
导入fmt
和my/pack1
,上述命令的输出将包括:
path/to/workspace/src/my/pack1
path/to/workspace/src/my/pack2 [fmt my/pack1]
您正在寻找导入my/pack1
的软件包:您可以看到my/pack2
导入它,因为my/pack1
被列为my/pack2
的依赖项
还有一个开源项目就是这样做:https://github.com/cespare/deplist