Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 世卫组织';他在用我的围棋包_Go_Dependencies - Fatal编程技术网

Go 世卫组织';他在用我的围棋包

Go 世卫组织';他在用我的围棋包,go,dependencies,Go,Dependencies,我的设想是,我们有许多正在开发的小项目,其中一些项目相互依赖。我们正试图提供一些基于依赖关系的自动化测试。e、 g.当一个包被更改时,确保所有依赖的包都通过了自己的单元测试 因此,问题是,在Go中,是否有一种方法/工具可以列出哪些包(本地工作空间)引用给定的包?Go工具本身包含对此的支持。问题: 你可以用 go list -f "{{.ImportPath}} {{.Imports}}" ./... 列出包及其依赖项(包导入的包)。在Go工作区的src文件夹中执行它。或 go list -f

我的设想是,我们有许多正在开发的小项目,其中一些项目相互依赖。我们正试图提供一些基于依赖关系的自动化测试。e、 g.当一个包被更改时,确保所有依赖的包都通过了自己的单元测试


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

Go工具本身包含对此的支持。问题:

你可以用

go list -f "{{.ImportPath}} {{.Imports}}" ./...
列出包及其依赖项(包导入的包)。在Go工作区的
src
文件夹中执行它。或

go list -f "{{.ImportPath}} {{.Deps}}" ./...
它递归地列出包及其依赖项

是的,这不是您想要的方向,因为您想要导入特定包的包。但是,您可以轻松地在上述命令的输出中搜索包名。将包列为依赖项的行就是您要查找的行;这些行中的第一个“标记”将是导入您的包的包(带有指向workspace
src
文件夹的路径)

在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”来获得我想要的。谢谢