Как вывести список всех нестандартных / нестандартных пакетов в 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/...).

Другие вопросы по тегам