我正在尝试使用 exec.Command 编译一个 go 包。我成功地将参数设置为“go”和“build”,如下所示:package mainimport ( "fmt" "log" "os/exec")func main() { out, err := exec.Command("go", "build").Output() if err != nil { log.Fatal(err) } fmt.Println(out)}但是,在尝试使用更多参数执行“构建”时,我似乎做错了什么?这是我的代码的样子:package mainimport ( "fmt" "log" "os/exec")func main() { out, err := exec.Command("set", "GOOS=js&&", "set", "GOARCH=wasm&&", "go", "build", "-o", "C:/Users/Daniel/Desktop/go-workspace/src/sandbox/other/wasm/assets/json.wasm", "kard").Output() if err != nil { log.Fatal(err) } fmt.Println(out)}输出是exec: "set": executable file not found in %PATH%我在命令行中为此执行的正常命令是set GOOS=js&& set GOARCH=wasm&& go build -o C:\Users\Daniel\Desktop\go-workspace\src\sandbox\other\wasm\assets\json.wasm kard.我假设我对使用 exec.Command 有一些误解?我真的很感谢任何支持。
1 回答

浮云间
TA贡献1829条经验 获得超4个赞
该应用程序使用 shell 语法设置环境变量,但 exec 包不使用 shell(除非您正在运行的命令是 shell)。
使用命令环境为执行的命令指定环境变量。
通常go build不会写入 stdout,但它会将错误写入 stderr。使用 CombinedOutput 而不是 Output 可以轻松捕获错误文本。
cmd := exec.Command("go", "build", "-o", "C:/Users/Daniel/Desktop/go-workspace/src/sandbox/other/wasm/assets/json.wasm", "kard")
cmd.Env = []string{"GOOS=js", "GOARCH=wasm"}
out, err := cmd.CombinedOutput()
if err != nil {
fmt.Printf("%v: %s\n", err, out)
}
- 1 回答
- 0 关注
- 160 浏览
添加回答
举报
0/150
提交
取消