203 votes

Puis-je énumérer tous les forfaits standard de Go ?

Y a-t-il un moyen dans Go de lister todo les paquets standard/intégrés (c'est-à-dire les paquets fournis avec une installation de Go) ?

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

8 votes

Défaut Go paquets golang.org/pkg

0 votes

Existe-t-il une fonction comme isStandardPackage(importPath string) bool que je peux utiliser ?

1 votes

Peut-on l'utiliser ? golang.org/pkg/cmd/go/internal/list ?

56voto

Carpetsmoker Points 3443

Vous pouvez utiliser le nouveau golang.org/x/tools/go/packages pour cela. Cela fournit une interface programmatique 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 un isStandardPackage() vous pouvez le 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
}

0 votes

Immédiatement recherchée, où se trouve ok d'où je viens et où j'ai trouvé ce bel article. reddit.com/r/golang/comments/35d0b2/about_the_comma_ok_idiom

4 votes

El packages.Load(nil, "std") exécute l'appel go list et analyse la sortie. Je note ceci pour les autres qui pourraient également faire l'hypothèse incorrecte que le paquet fournit l'implémentation de la commande.

37voto

ThunderCat Points 45890

Utilisez le go list std pour lister les paquets standards. Le chemin d'importation spécial std s'étend à tous les paquets de la bibliothèque standard de Go ( 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))

3voto

svetha.cvl Points 754

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X