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.