Tüm standart Go paketlerini listeleyebilir miyim?


186

Git'te tüm standart / yerleşik paketleri (örneğin, bir Go kurulumuyla birlikte gelen paketler) listelemenin bir yolu var mı ?

Bir paket listem var ve hangi paketlerin standart olduğunu bulmak istiyorum.


7
Standart Gopaketler golang.org/pkg
Arslanbekov

isStandardPackage(importPath string) boolKullanabileceğim bir işlev var mı ?
Alok Kumar Singh


Sanırım tüm yükleme paketlerini gösteren liste.
Arslanbekov

burada neyi başarmaya çalışıyorsun? A içermeyen bir içe aktarma ifadesi .kendi paketinizdir veya standart kütüphanenin bir parçasıdır.
ifnotak

Yanıtlar:


49

Bunun için yenisini kullanabilirsiniz golang.org/x/tools/go/packages. Bu, çoğu için programlı bir arayüz sağlar 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 ... ]
}

Almak için isStandardPackage()haritayı şu şekilde saklayabilirsiniz:

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
}

Hemen nereden okgeldiğini araştırdı ve bu güzel makaleyi buldu. reddit.com/r/golang/comments/35d0b2/about_the_comma_ok_idiom
içeriden

2
packages.Load(nil, "std")Çağrı yürütür go listkomutu ve çıkış ayrıştırır. Bunu, paketin komut uygulamasını sağladığına dair yanlış varsayımda bulunan diğer kullanıcılar için de not ediyorum.
iLoveReflection

32

go list stdStandart paketleri listelemek için komutu kullanın . Özel içe aktarma yolu stdstandart Go kitaplığındaki ( doc ) tüm paketlere genişler .

Listeyi bir Go programında almak için bu komutu yürütün:

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

3

Basit bir çözüm istiyorsanız, $ GOROOT / pkg cinsinden bir paketin mevcut olup olmadığını kontrol edebilirsiniz. Tüm standart paketler buraya kurulur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.