Golang exec.Command 问题:总是失败,退出代码为 2

Golang exec.Command problem: always fails with exit code 2

我的问题:

我想使用内置的 exec 包从 golang 代码调用 go build 命令。对于许多外部程序,这工作得很好。但是对于 go build,它似乎不太正确。 它总是 returns exit status 2

编辑 #1:当 运行 普通命令行 window 或 powershell window 中的命令时,一切正常。

到目前为止我尝试了什么:


代码:

parts := strings.Split(fmt.Sprintf(`go build -o %s -a -v -work -x -ldflags "-s -w" %s`, artifact, bd.CloneDir), " ")
cmd := exec.Command(parts[0], parts[1:]...)
messageCh <- fmt.Sprintf("build command to be executed: '%s'", cmd.String())
result, err := cmd.CombinedOutput()
if err != nil {
    messageCh <- fmt.Sprintf("build step '%s': failed because %s", buildStep, err.Error())
    return "", err
}
messageCh <- fmt.Sprintf("build step '%s': successful with content:\n%s", buildStep, string(result))

输出:

build command to be executed: 'C:\Go\bin\go.exe build -o data/2/1619456424/artifact/github-public-golang-test-repo -ldflags "-s -w" data/2/1619456424/clone/main.go'
build step 'build': failed because exit status 2

希望你能给我一些线索。提前致谢!

问题出在这里:

ldflags "-s -w" 

拆分时,这将产生三个参数,而不是两个,即 ldflags"-s-w"

一个一个地构建数组元素而不是拆分。对于 ldflags,使用:

args:=[]string { "go",
  ...
 "ldflags",
 "-s -w",
  ...
}