Как составить список всех нестандартных / пользовательских пакетов в Go? - PullRequest
0 голосов
/ 17 октября 2019

Как уже упоминалось здесь можно получить все стандартные пакеты 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 Ответ

1 голос
/ 20 октября 2019

Вы можете использовать синтаксис ... в поле 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/...).

...