谁使用我的Go包

时间:2016-01-20 06:23:47

标签: go dependencies

我的方案是我们有许多正在开发的小项目,其中一些项目彼此依赖。我们正在尝试根据依赖关系提供一些自动化测试。例如更改包时,请确保所有依赖包都通过自己的单元测试。

所以问题是,在Go中,是否有一种方法/工具可以列出哪些包(本地工作空间)指的是给定包?

1 个答案:

答案 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/pack1my/pack2,其中my/pack1不会导入任何内容,my/pack2导入fmtmy/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