go - 如何在 Go 中列出所有非标准/自定义包?

标签 go go-packages

如前所述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/和其他一些组合为patternLoad()功能。他们都没有工作。

最佳答案

您可以使用 ... 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/

相关文章:

json - 如何解析 JSON 提取数组

go - 发布一个 golang 模块 : Semantic versioning

linux - go 是否有特定于操作系统的软件包不能在其他操作系统上使用?

go - 有没有更简单的方法来更新本地 Go 包

go - 为什么我的测试无法识别我的 Golang 包函数?

unit-testing - 如何覆盖 GOLANG 中的多个文件

在 Windows 上使用 glide 安装命令

go - 为什么在新计算机上访问 Firestore 时出现 ‘panic: runtime error: invalid memory address or nil pointer dereference’?

go - 构建后找不到命令

go - 如何递归地将字符串连接到golang中的字符串类型数组