繁体   English   中英

谁正在使用我的Go包

[英]who's using my Go package

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

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

go工具本身包含对此的支持。 问题: 如何列出已安装的go包

您可以使用

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/pack1的依赖my/pack2

还有一个开源项目就是这样做: https//github.com/cespare/deplist

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM