Go 世卫组织';他在用我的围棋包
我的设想是,我们有许多正在开发的小项目,其中一些项目相互依赖。我们正试图提供一些基于依赖关系的自动化测试。e、 g.当一个包被更改时,确保所有依赖的包都通过了自己的单元测试Go 世卫组织';他在用我的围棋包,go,dependencies,Go,Dependencies,我的设想是,我们有许多正在开发的小项目,其中一些项目相互依赖。我们正试图提供一些基于依赖关系的自动化测试。e、 g.当一个包被更改时,确保所有依赖的包都通过了自己的单元测试 因此,问题是,在Go中,是否有一种方法/工具可以列出哪些包(本地工作空间)引用给定的包?Go工具本身包含对此的支持。问题: 你可以用 go list -f "{{.ImportPath}} {{.Imports}}" ./... 列出包及其依赖项(包导入的包)。在Go工作区的src文件夹中执行它。或 go list -f
因此,问题是,在Go中,是否有一种方法/工具可以列出哪些包(本地工作空间)引用给定的包?Go工具本身包含对此的支持。问题: 你可以用
go list -f "{{.ImportPath}} {{.Imports}}" ./...
列出包及其依赖项(包导入的包)。在Go工作区的src
文件夹中执行它。或
go list -f "{{.ImportPath}} {{.Deps}}" ./...
它递归地列出包及其依赖项
是的,这不是您想要的方向,因为您想要导入特定包的包。但是,您可以轻松地在上述命令的输出中搜索包名。将包列为依赖项的行就是您要查找的行;这些行中的第一个“标记”将是导入您的包的包(带有指向workspacesrc
文件夹的路径)
在Unix系统上,您可以使用|grep
筛选这些行,例如:
go list -f "{{.ImportPath}} {{.Imports}}" ./... |grep yourpackage
(这还将列出一行,其中包含您的包及其依赖项。)
示例:
假设您有两个包: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
的依赖项
还有一个开源项目正是这样做的:谢谢@icza的答案,但是它是关于找到依赖于给定pkg的人,而不是依赖于谁的pkg。不确定你是否有这样的答案?@JasonXu请阅读全部答案。您要查找的是给定命令的输出。它对我有效,经过测试,我可以在我的根项目文件夹中运行“go list-f”{{.ImportPath}{{.Imports}}”。/…| grep my|u pkg_path”来获得我想要的。谢谢