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

时间:2017-01-27 07:27:13

标签: go

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

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
        }
    }
}

1 个答案:

答案 0 :(得分:2)

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

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

例如,执行

go list github.com/some/package

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

github.com/some/package

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

go list github.com/some/package github.com/other/package

输出将是:

github.com/some/package
github.com/other/package

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

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个文件,则会收到不同的消息:

can't load package: package github.com/some/package: no buildable Go source files in <GOPATH-here>/src/github.com/some/package

如果您希望其中有一些包,请附加...

go list github.com/some/package/...

要获得更多选项和可能性,请运行go help list,然后查看相关问题:How to list installed go packages