如何用Golang脚本实现Go WASM编译并解决执行返回错误码2的问题
报错根因
exec.Command 对传入参数的格式有严格要求:第一个参数是要执行的可执行文件路径,后续每个命令行参数必须作为独立的字符串分开传入,不能将多个参数拼接为单个字符串。
你当前写法将build -o res.wasm ./src/main.go整个作为第二个参数传入,相当于go命令接收到的第一个子命令是包含空格的长字符串,无法识别该非法参数,因此返回错误码2(Go命令行工具的状态码2通常代表参数非法)。
修复方法
将go build的所有参数拆分为独立字符串传入,同时建议绑定标准错误输出方便后续排查其他可能的问题(比如源码路径不存在、依赖缺失等):
package main import ( "os" "os/exec" ) func main() { // 拆分所有命令参数为独立字符串 cmd := exec.Command("go", "build", "-o", "res.wasm", "./src/main.go") // 注入WASM编译所需的环境变量 cmd.Env = append(os.Environ(), "GOOS=js", "GOARCH=wasm") // 绑定标准输出和错误输出,方便查看编译日志/报错 cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr if err := cmd.Run(); err != nil { panic(err) } }
内容的提问来源于stack exchange,提问作者Alberto Zanovello
相关产品推荐
相关产品推荐

