首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用golang exec.Command运行go安装

使用golang exec.Command运行go安装
EN

Stack Overflow用户
提问于 2017-03-21 11:16:55
回答 1查看 1.8K关注 0票数 1

我正试图为一个web钩子编写一些代码,这将调用go安装。我遇到的问题是当我用exec.Command调用任何go命令时,GOPATH没有被设置

代码语言:javascript
复制
func exec_cmd(w http.ResponseWriter, cmd string, args ...string) {
    command := exec.Command(cmd, args...)
    var out bytes.Buffer
    var stderr bytes.Buffer
    command.Stdout = &out
    command.Stderr = &stderr
    err := command.Run()
    if err != nil {
        errstring := fmt.Sprintf(fmt.Sprint(err) + ": " + stderr.String())
        io.WriteString(w, errstring)
    }
    io.WriteString(w, out.String())
    fmt.Println(out.String())
}

func webhook(w http.ResponseWriter, r *http.Request) {
    exec_cmd(w, "go", "install", "github.com/me/myrepo/mything")
}

func test(w http.ResponseWriter, r *http.Request) {
    io.WriteString(w, "test")
}

func main() {
    mux := http.NewServeMux()
    mux.HandleFunc("/webhook", webhook)
    mux.HandleFunc("/", test)
    http.ListenAndServe(":8000", mux)
}

当web钩子端点被击中时,它会给出:

代码语言:javascript
复制
exit status 1: can't load package: package github.com/me/myrepo/mything: cannot find package "github.com/me/myrepo/mything" in any of:
    /usr/lib/go-1.6/src/github.com/me/myrepo/mything (from $GOROOT)
    ($GOPATH not set)

我将如何确保GOPATH在这种背景下成立?

如果我从命令行运行"go install github.com/me/myrepo/mything“,它就能正常工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-21 21:38:09

您是在编辑器上下文中运行这个,还是在容器中运行?如果没有GOPATH env变量集,它将无法在上下文中工作。

如果与go一起运行main.go,它是否有效?在这种情况下,它在不修改代码的情况下适用于我。只要父上下文能够访问GOPATH,它就应该这样做。您可以手动设置它,如下所示:

代码语言:javascript
复制
command.Env = append(os.Environ(), "GOPATH=/tmp/go")

或者您可以在这个过程将运行的上下文中设置GOPATH (用于安装)和PATH (用于go,git cmds) (可能更好),例如在systemd单元文件中。

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

https://stackoverflow.com/questions/42925551

复制
相关文章

相似问题

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