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.
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
}
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))
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.