Alo*_*ngh 177 go go-packages
Go中是否可以列出所有标准/内置软件包(即,与GoLang安装一起安装的软件包)?
我有一个软件包列表,我想弄清楚哪些软件包是标准的。
Mar*_*oij 44
您可以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 ... ]
}
Run Code Online (Sandbox Code Playgroud)
要获取,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
}
Run Code Online (Sandbox Code Playgroud)
Cer*_*món 30
使用go list std命令列出标准软件包。特殊的导入路径std扩展到标准Go库(doc)中的所有软件包。
执行该命令以获取Go程序中的列表:
cmd := exec.Command("go", "list", "std")
p, err := cmd.Output()
if err != nil {
// handle error
}
stdPkgs = strings.Fields(string(p))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7865 次 |
| 最近记录: |