क्या मैं सभी मानक गो संकुल सूचीबद्ध कर सकता हूँ?


186

क्या सभी मानक / बिल्ट-इन पैकेजों को सूचीबद्ध करने के लिए गो में एक तरीका है (यानी, वे पैकेज जो गो इंस्टॉलेशन के साथ आते हैं)?

मेरे पास पैकेजों की एक सूची है और मैं यह पता लगाना चाहता हूं कि कौन से पैकेज मानक हैं।


7
डिफ़ॉल्ट Goपैकेज golang.org/pkg
Arslanbekov

क्या ऐसा कोई फ़ंक्शन है isStandardPackage(importPath string) boolजिसका मैं उपयोग कर सकता हूं?
आलोक कुमार सिंह

1
क्या इसका उपयोग किया जा सकता है? golang.org/pkg/cmd/go/internal/list ?
आलोक कुमार सिंह

मुझे लगता है कि सूची आपको सभी स्थापित पैकेज दिखाने के लिए है।
अर्सलानबकोव

आप यहां क्या हासिल करने की कोशिश कर रहे हैं? एक बिना एक आयात विवरण .या तो अपने स्वयं के आंतरिक पैकेज या मानक पुस्तकालय का एक हिस्सा है।
इप्टनक

जवाबों:


49

इसके लिए आप नए का उपयोग कर सकते हैं golang.org/x/tools/go/packages। यह अधिकांश के लिए एक प्रोग्रामेटिक इंटरफ़ेस प्रदान करता है 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 ... ]
}

पाने के लिए isStandardPackage()आप इसे एक मानचित्र में संग्रहीत कर सकते हैं, जैसे:

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
}

तुरंत खोज की गई कि okयह अच्छा लेख कहां से आया और पाया गया। reddit.com/r/golang/comments/35d0b2/about_the_comma_ok_idiom
अंदरूनी सूत्र

2
packages.Load(nil, "std")कॉल कार्यान्वित go listआदेश और उत्पादन को पार्स करता है। मैं इसे दूसरों के लिए नोट करता हूं जो गलत धारणा भी बना सकते हैं कि पैकेज कमांड कार्यान्वयन प्रदान करता है।
58 पर १ '

32

go list stdमानक पैकेजों को सूचीबद्ध करने के लिए कमांड का उपयोग करें । विशेष आयात पथ stdमानक गो पुस्तकालय ( डॉक्टर ) में सभी पैकेजों तक फैलता है ।

जाओ कार्यक्रम में सूची प्राप्त करने के लिए उस आदेश का पालन करें:

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

3

यदि आप एक सरल समाधान चाहते हैं, तो आप जाँच सकते हैं कि क्या कोई पैकेज $ GOROOT / pkg में मौजूद है। सभी मानक पैकेज यहां स्थापित हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.