Могу ли я перечислить все стандартные пакеты Go? - PullRequest
0 голосов
/ 23 апреля 2019

Есть ли способ в Go перечислить все стандартные / встроенные пакеты (пакеты, которые устанавливаются вместе с установкой GoLang)?

У меня есть список пакетов, и я хочу выяснить,это стандартный пакет.

Ответы [ 3 ]

2 голосов
/ 23 апреля 2019

Используйте команду go list std для просмотра списка стандартных пакетов.

Выполните эту команду для получения списка в программе Go:

cmd := exec.Command("go", "list", "std")
p, err := cmd.Output()
if err != nil {
    // handle error
}
stdPkgs = strings.Fields(string(p))
1 голос
/ 18 мая 2019

Для этого вы можете использовать новый golang.org/x/tools/go/packages.Это обеспечивает программный интерфейс для большинства go list:

package main

import (
    "fmt"

    "golang.org/x/tools/go/packages"
)

func main() {
    pkgs, err := packages.Load(nil, "std")
    if err != nil {
        panic(err)
    }

    fmt.Println(pkgs)
    // Output: [archive/tar archive/zip bufio bytes compress/bzip2 ... ]
}

. Чтобы получить isStandardPackage(), вы можете сохранить его на карте, например:

package main

import (
    "fmt"

    "golang.org/x/tools/go/packages"
)

var standardPackages = make(map[string]struct{})

func init() {
    pkgs, err := packages.Load(nil, "std")
    if err != nil {
        panic(err)
    }

    for _, p := range pkgs {
        standardPackages[p.PkgPath] = struct{}{}
    }
}

func isStandardPackage(pkg string) bool {
    _, ok := standardPackages[pkg]
    return ok
}

func main() {
    fmt.Println(isStandardPackage("fmt"))  // true
    fmt.Println(isStandardPackage("nope")) // false
}
0 голосов
/ 23 апреля 2019

Если вы хотите простое решение, вы можете проверить наличие пакета в $ GOROOT / pkg. Все стандартные пакеты установлены здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...