谁在使用我的 Go 包
who's using my Go package
我的场景是我们有很多小项目在开发中,其中一些相互依赖。我们正在尝试提供一些基于依赖关系的自动化测试。例如当一个包被更改时,确保所有依赖的包都通过它们自己的单元测试。
所以问题是,在 Go 中,是否有一个 way/tool 来列出哪些包(本地工作 space)引用给定的包?
go
工具本身包含对此的支持。来自问题:
你可以使用
go list -f "{{.ImportPath}} {{.Imports}}" ./...
列出包及其依赖项(包导入的包)。在您的 Go 工作区的 src
文件夹中执行它。或者
go list -f "{{.ImportPath}} {{.Deps}}" ./...
递归列出包及其依赖项。
是的,这不是您想要的方向,因为您想要导入特定包的包。但是您可以轻松地在上述命令的输出中搜索您的包名称。您的包被列为依赖项的行就是您要查找的行;这些行的第一行 "token" 将是导入您的包的包(带有工作区 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
[=30= 的依赖项]
还有一个 open-source 项目就是这样做的:https://github.com/cespare/deplist
我的场景是我们有很多小项目在开发中,其中一些相互依赖。我们正在尝试提供一些基于依赖关系的自动化测试。例如当一个包被更改时,确保所有依赖的包都通过它们自己的单元测试。
所以问题是,在 Go 中,是否有一个 way/tool 来列出哪些包(本地工作 space)引用给定的包?
go
工具本身包含对此的支持。来自问题:
你可以使用
go list -f "{{.ImportPath}} {{.Imports}}" ./...
列出包及其依赖项(包导入的包)。在您的 Go 工作区的 src
文件夹中执行它。或者
go list -f "{{.ImportPath}} {{.Deps}}" ./...
递归列出包及其依赖项。
是的,这不是您想要的方向,因为您想要导入特定包的包。但是您可以轻松地在上述命令的输出中搜索您的包名称。您的包被列为依赖项的行就是您要查找的行;这些行的第一行 "token" 将是导入您的包的包(带有工作区 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
[=30= 的依赖项]
还有一个 open-source 项目就是这样做的:https://github.com/cespare/deplist