Как вывести список всех нестандартных / нестандартных пакетов в Go?
Как уже упоминалось здесь можно получить все стандартные пакеты Go с помощью https://godoc.org/golang.org/x/tools/go/packages "ю.ш.Load()
функция, в которой на входе можно указать "узор".
pkgs, err := packages.Load(nil, pattern)
Например, если pattern = "std"
затем он возвращает все стандартные пакеты.
Но если я хочу получить список настраиваемых / определяемых пользователем пакетов с настраиваемыми шаблонами, такими как только папки поставщика формы github.com/X/Y/vendor/...
тогда как именно я могу указать узор?
Я пробовал использовать /vendor/
, github.com/X/Y/vendor/
и некоторые другие комбинации как pattern
в Load()
функция. Ни один из них не работал.
1 ответ
Вы можете использовать ...
синтаксис в pattern
поле Load()
функция.
пример
Для модуля My 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/...
).