【发布时间】:2017-03-21 11:16:55
【问题描述】:
我正在尝试为 webhook 编写一些代码,该代码将调用 go install。我遇到的问题是当我使用 exec.Command 调用任何 go 命令时没有设置 GOPATH
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)
}
当 webhook 端点被命中时,它会给出:
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”,它工作正常。
【问题讨论】:
-
在golang.org/pkg/os/exec/#Cmd中填写
Env。 -
你也应该更新你的 Go 版本,如果只是因为 go1.8 引入了一个默认的 GOPATH。