Posso elencare tutti i pacchetti Go standard?


186

C'è un modo in Vai a elencare tutto i pacchetti standard / integrati (ovvero i pacchetti che vengono installati con un'installazione Go)?

Ho un elenco di pacchetti e voglio capire quali pacchetti sono standard.


7
GoPacchetti predefiniti golang.org/pkg
Arslanbekov il

Esiste una funzione come quella isStandardPackage(importPath string) boolche posso usare?
Alok Kumar Singh,


Penso all'elenco per mostrarti tutti i pacchetti di installazione.
Arslanbekov,

cosa stai cercando di ottenere qui? Una dichiarazione di importazione senza a .è un pacchetto interno o una parte della libreria standard.
ifnotak,

Risposte:


49

Puoi usare il nuovo golang.org/x/tools/go/packagesper questo. Ciò fornisce un'interfaccia programmatica per la maggior parte di 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 ... ]
}

Per ottenere un isStandardPackage()puoi memorizzarlo in una mappa, in questo modo:

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
}

Ho subito cercato da dove okviene e ho trovato questo bell'articolo. reddit.com/r/golang/comments/35d0b2/about_the_comma_ok_idiom
insider

2
La packages.Load(nil, "std")chiamata esegue il go listcomando e analizza l'output. Lo noto per gli altri che potrebbero anche ipotizzare erroneamente che il pacchetto fornisca l'implementazione del comando.
iLoveReflection il

32

Utilizzare il go list stdcomando per elencare i pacchetti standard. Il percorso di importazione speciale si stdespande a tutti i pacchetti nella libreria Go ( doc ) standard .

Eseguire quel comando per ottenere l'elenco in un programma Go:

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

3

Se si desidera una soluzione semplice, è possibile verificare se un pacchetto è presente in $ GOROOT / pkg. Tutti i pacchetti standard sono installati qui.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.