web-dev-qa-db-fra.com

Puis-je répertorier tous les packages Go standard?

Existe-t-il un moyen dans la liste Aller à tous les packages standard/intégrés (c'est-à-dire les packages fournis avec une installation Go)?

J'ai une liste de packages et je veux savoir quels packages sont standard.

184
Alok Kumar Singh

Vous pouvez utiliser le nouveau golang.org/x/tools/go/packages pour cela. Cela fournit une interface de programmation pour la plupart des 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 ... ]
}

Pour obtenir une isStandardPackage() vous pouvez la stocker dans une carte, comme ceci:

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
}
48
Martin Tournoij

Utilisez le go list std commande pour lister les packages standard. Le chemin d'importation spécial std s'étend à tous les packages de la bibliothèque Go standard ( doc ).

Exécutez cette commande pour obtenir la liste dans un programme Go:

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

Si vous voulez une solution simple, vous pouvez vérifier si un paquet est présent dans $ GOROOT/pkg. Tous les packages standard sont installés ici.

3
svetha.cvl