如何在 Go 中列出所有 non-standard/custom 个包?
How to list all non-standard/custom packages in Go?
如前所述,here one can get all the standard Go packages using https://godoc.org/golang.org/x/tools/go/packages 的 Load()
函数可以将 "pattern" 作为输入。
pkgs, err := packages.Load(nil, pattern)
例如,如果 pattern = "std"
那么它 returns 所有标准包。
但是,如果我想获得 custom/user-defined 包的列表,这些包具有自定义模式,例如只有 github.com/X/Y/vendor/...
形式的供应商文件夹,那么我如何才能准确指定模式?
我尝试在 Load()
函数中使用 /vendor/
、github.com/X/Y/vendor/
和其他一些组合作为 pattern
。 None 其中有效。
您可以在 Load()
函数的 pattern
字段中使用 ...
语法。
例子
我的 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)
}
}
}
returns 以 github.com/hashicorp
开头的所有必需包(甚至是传递包):
github.com/hashicorp/errwrap
github.com/hashicorp/go-multierror
请注意,您还可以在模式中的任何位置使用 ...
(...hashicorp...
、...ha...corp...
、github.com/...
)。
如前所述,here one can get all the standard Go packages using https://godoc.org/golang.org/x/tools/go/packages 的 Load()
函数可以将 "pattern" 作为输入。
pkgs, err := packages.Load(nil, pattern)
例如,如果 pattern = "std"
那么它 returns 所有标准包。
但是,如果我想获得 custom/user-defined 包的列表,这些包具有自定义模式,例如只有 github.com/X/Y/vendor/...
形式的供应商文件夹,那么我如何才能准确指定模式?
我尝试在 Load()
函数中使用 /vendor/
、github.com/X/Y/vendor/
和其他一些组合作为 pattern
。 None 其中有效。
您可以在 Load()
函数的 pattern
字段中使用 ...
语法。
例子
我的 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)
}
}
}
returns 以 github.com/hashicorp
开头的所有必需包(甚至是传递包):
github.com/hashicorp/errwrap
github.com/hashicorp/go-multierror
请注意,您还可以在模式中的任何位置使用 ...
(...hashicorp...
、...ha...corp...
、github.com/...
)。