Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Go中列出所有非标准/定制软件包?_Go_Go Packages - Fatal编程技术网

如何在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