Ich versuche, etwas Code für einen Webhook zu schreiben, der Aufruf wird, installieren gehen. Das Problem, das ich habe, ist, dass die GOPATH nicht gesetzt ist, wenn ich irgendwelche Befehle ziehen mit exec.Commandrunning gehen mit golang installieren exec.Command
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)
}
wenn der Webhook Endpunkt getroffen wird, gibt es:
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)
Wie würde gehe ich darum, sicherzustellen, dass der GOPATH in diesem Kontext steht?
Wenn ich "go install github.com/me/myrepo/mything" über die Befehlszeile ausführen, funktioniert es gut.
Füllen Sie "Env" in https://golang.org/pkg/os/exec/#Cmd. – Volker
Sie sollten auch Ihre Version von Go aktualisieren, nur weil go1.8 einen Standard-GOPATH eingeführt hat. – JimB