我需要使用Go工具链构建一个程序,然后执行它。由于某些原因,由于分支,我收到了权限错误。有没有办法避免此错误或任何最佳做法?我认为我的程序与Go test工具做了类似的事情,尽管go test没有得到这种错误。
Go test
go test
package main import( "os" "os/exec" "flag" log "github.com/golang/glog" ) func main(){ flag.Parse() tdir := "abc" if err := os.MkdirAll(tdir, 0777); err !=nil{ log.Error(err) return } f, err := os.Create(tdir + "/main.go") if err !=nil{ log.Error(err) return } if err = f.Chmod(0777); err !=nil{ log.Error(err) return } defer f.Close() defer os.Remove(f.Name()) if _, err = f.Write([]byte(tpl)); err !=nil{ log.Error(err) return } cmd := exec.Command("go", "build", "-o", "edoc") cmd.Path = tdir b, err := cmd.CombinedOutput() if err !=nil{ log.Errorf("%s, err %v", b, err) return } } var tpl = `package main import( "fmt" "flag" ) func main(){ flag.Parse() fmt.Printf("Hello World") }`
错误:
E0202 18:24:42.359008 13600 main.go:36] , err fork/exec abc: permission denied
作业系统:OSX 10.11
您要将命令路径从go二进制文件的位置更改为abc。
go
abc
type Cmd struct { // Path is the path of the command to run. // // This is the only field that must be set to a non-zero // value. If Path is relative, it is evaluated relative // to Dir. Path string
如果要更改工作目录,请使用 Cmd.Dir
Cmd.Dir