如前所述here可以使用 https://godoc.org/golang.org/x/tools/go/packages 获取所有标准 Go 包的Load()
可以将“模式”作为输入的功能。pkgs, err := packages.Load(nil, pattern)
例如,如果 pattern = "std"
然后它返回所有标准包。
但是,如果我想获取具有自定义模式的自定义/用户定义包的列表,例如只有 github.com/X/Y/vendor/...
形式的 vendor 文件夹那么我如何准确地指定模式?
我试过使用 /vendor/
, github.com/X/Y/vendor/
和其他一些组合为pattern
在 Load()
功能。他们都没有工作。
最佳答案
您可以使用 ...
pattern
中的语法Load()
的字段功能。
例子
我的 Go 模块需要 github.com/hashicorp/go-multierror
包裹 :
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
开头的所有必需的包(甚至是传递的):github.com/hashicorp/errwrap
github.com/hashicorp/go-multierror
请注意,您也可以使用
...
模式中的任何位置(...hashicorp...
、...ha...corp...
、github.com/...
)。
关于go - 如何在 Go 中列出所有非标准/自定义包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58422294/