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.