首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查Go中已安装的软件包

检查Go中已安装的软件包
EN

Stack Overflow用户
提问于 2017-01-27 07:27:12
回答 1查看 4.9K关注 0票数 3

我需要检查是否安装了一些包,但我需要使用代码,而不是shell中的go list工具。我找到了一个解决方案,但速度很慢(2-3秒)。这是我目前的代码:

代码语言:javascript
复制
out, err := exec.Command("sh", "-c", "go list all").Output()
if err != nil {
    output := strings.Split(string(out), "\n")
    for _, value := range output {
        if value == "github.com/some/package" {
            // package is installed
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-27 08:24:18

基本上你回答了你自己的问题。你想要更快的解决方案吗?尝试“调优”go list命令。

要检查单个包的存在,您可以将该单个包传递给go list,如果它存在,它将输出它,否则输出将是错误消息。

例如,执行

代码语言:javascript
复制
go list github.com/some/package

如果存在github.com/some/package,则输出如下:

代码语言:javascript
复制
github.com/some/package

还可以将多个包传递给go list

代码语言:javascript
复制
go list github.com/some/package github.com/other/package

产出将是:

代码语言:javascript
复制
github.com/some/package
github.com/other/package

如果传递的包不存在,输出将类似于:

代码语言:javascript
复制
can't load package: package github.com/some/package: cannot find package "github.com/some/package" in any of:
    /usr/local/go/src/github.com/some/package (from $GOROOT)
    <GOPATH-here>/src/github.com/some/package (from $GOPATH)

还请注意,如果您传递的包不包含*.go文件,则会收到不同的消息:

代码语言:javascript
复制
can't load package: package github.com/some/package: no buildable Go source files in <GOPATH-here>/src/github.com/some/package

如果您希望在其中包含一些包,请追加...

代码语言:javascript
复制
go list github.com/some/package/...

有关更多选项和可能性,请运行go help list,并参见相关问题:How to list installed go packages

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41888844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档