如何在Go中列出所有非标准/定制软件包?
如前所述,您可以使用的如何在Go中列出所有非标准/定制软件包?,go,go-packages,Go,Go Packages,如前所述,您可以使用的Load()函数获取所有标准的Go包,在该函数中,您可以输入“pattern” pkgs,err:=packages.Load(无,模式) 例如,如果pattern=“std”则返回所有标准包 但是,如果我想获得具有自定义模式的自定义/用户定义包的列表,例如只有格式为github.com/X/Y/vendor/…的供应商文件夹,那么如何准确地指定模式 我尝试过在Load()函数中使用/vendor/、github.com/X/Y/vendor/和一些其他组合作为模式。他们都
Load()
函数获取所有标准的Go包,在该函数中,您可以输入“pattern”
pkgs,err:=packages.Load(无,模式)
例如,如果pattern=“std”
则返回所有标准包
但是,如果我想获得具有自定义模式的自定义/用户定义包的列表,例如只有格式为github.com/X/Y/vendor/…
的供应商文件夹,那么如何准确地指定模式
我尝试过在
Load()
函数中使用/vendor/
、github.com/X/Y/vendor/
和一些其他组合作为模式。他们都没有工作过 您可以在Load()
函数的模式
字段中使用..
语法
实例
我的Go模块需要软件包:
module mymodule
require github.com/hashicorp/go-multierror v1.0.0
因此,以下代码:
package main
import (
"fmt"
"golang.org/x/tools/go/packages"
)
func main() {
pkgs, err := packages.Load(nil, "github.com/hashicorp...")
if err == nil {
for _, pkg := range pkgs {
fmt.Println(pkg.ID)
}
}
}
返回以github.com/hashicorp开头的所有必需包(即使是可传递的包):
请注意,您也可以在模式中的任何位置使用(…hashicorp…
,…ha…corp.
,github.com/…
)。谢谢@norbjd!结果我尝试了所有的组合,除了我在问题中提到的…
组合顺便说一句,当我使用…供应商…
时,我没有得到预期的结果。但我确实得到了所有其他组合的预期结果,如…X…
。你也是这样吗?vendor
有什么特别之处?如果你说的是vendor
目录(由go mod vendor
生成),它不是一个包本身,它只是一个目录,包含所有外部依赖项的本地副本。
github.com/hashicorp/errwrap
github.com/hashicorp/go-multierror