0

正如这里提到的,可以使用https://godoc.org/golang.org/x/tools/go/packages的函数获取所有标准 Go 包Load(),其中可以提供“模式”作为输入。

pkgs, err := packages.Load(nil, pattern)

例如,如果pattern = "std"then 它返回所有标准包。

但是,如果我想获取具有自定义模式的自定义/用户定义包的列表,例如只有表单的供应商文件夹github.com/X/Y/vendor/...那么我该如何指定模式呢?

我尝试过使用/vendor/,github.com/X/Y/vendor/以及函数pattern中的其他一些组合。Load()他们都没有工作。

4

1 回答 1

1

您可以使用函数字段中的...语法。patternLoad()

例子

我的 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/...)。

于 2019-10-20T10:16:10.593 回答