Czy mogę wymienić wszystkie standardowe pakiety Go?


186

Czy w Go można znaleźć listę wszystkich standardowych / wbudowanych pakietów (tj. Pakietów, które są instalowane z instalacją Go)?

Mam listę pakietów i chcę dowiedzieć się, które pakiety są standardowe.


7
Domyślne Gopakiety golang.org/pkg
— Arslanbekov

Czy jest jakaś funkcja, isStandardPackage(importPath string) boolktórej mogę użyć?
— Alok Kumar Singh,


Myślę, że lista pokazująca wszystkie pakiety instalacyjne.
— Arslanbekov

co próbujesz tutaj osiągnąć? Instrukcja importu bez a .jest albo własnym pakietem wewnętrznym, albo częścią standardowej biblioteki.
— ifnotak

Odpowiedzi:


49

Możesz do tego użyć nowego golang.org/x/tools/go/packages. Zapewnia to programowy interfejs dla większości 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 ... ]
}

Aby go zdobyć isStandardPackage(), możesz zapisać go na mapie:

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
}

Natychmiast sprawdziłem, skąd okpochodzi i znalazłem ten fajny artykuł. reddit.com/r/golang/comments/35d0b2/about_the_comma_ok_idiom
— insider

2
packages.Load(nil, "std")Wezwanie wykonuje go listpolecenia i przetwarza dane wyjściowe. Zwracam na to uwagę innym, którzy mogą również błędnie założyć, że pakiet zapewnia implementację polecenia.
— iLoveReflection

32

Użyj go list stdpolecenia, aby wyświetlić listę standardowych pakietów. Specjalna ścieżka importu stdrozszerza się na wszystkie pakiety w standardowej bibliotece Go ( doc ).

Wykonaj to polecenie, aby uzyskać listę w programie Go:

cmd := exec.Command("go", "list", "std")
p, err := cmd.Output()
if err != nil {
    // handle error
}
stdPkgs = strings.Fields(string(p))

3

Jeśli chcesz prostego rozwiązania, możesz sprawdzić, czy pakiet jest obecny w $ GOROOT / pkg. Tutaj są zainstalowane wszystkie standardowe pakiety.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.