gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:17:38 25 4
gpt4 key购买 nike

如前所述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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com