为了账号安全,请及时绑定邮箱和手机立即绑定

谁在使用我的 Go 包

谁在使用我的 Go 包

Go
茅侃侃 2021-12-07 14:45:26
我的场景是我们有很多小项目在开发中,其中一些相互依赖。我们正在尝试提供一些基于依赖关系的自动化测试。例如,当一个包被改变时,确保所有依赖的包通过它们自己的单元测试。所以问题是,在 Go 中,是否有一种方法/工具可以列出哪些包(本地工作空间)指的是给定的包?
查看完整描述

1 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

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


您可以使用


go list -f "{{.ImportPath}} {{.Imports}}" ./...

列出包及其依赖项(包导入的包)。在srcGo 工作区的文件夹中执行它。或者


go list -f "{{.ImportPath}} {{.Deps}}" ./...

其中递归列出包及其依赖项。


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


在 Unix 系统上,您可以使用|grep过滤这些行,例如


go list -f "{{.ImportPath}} {{.Imports}}" ./... |grep yourpackage

(这还将列出包含您的包及其依赖项的行。)


例子:


假设您有 2 个包:my/pack1and my/pack2,其中my/pack1什么都不导入,而my/pack2importfmt和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


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


查看完整回答
反对 回复 2021-12-07
  • 1 回答
  • 0 关注
  • 121 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信