我正在尝试运行一个简单的golang代码
$ cat blah.go
package main
import (
"fmt"
"os/exec"
)
func main() {
cmd := exec.Command("sudo","ls")
out, err := cmd.Output()
fmt.Printf("%s", string(out))
fmt.Printf("%s", err.Error())
}
我得到了:
$ go run blah.go
blah.go
utils.go
weave_help_test.go
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xb code=0x1 addr=0x20 pc=0x400dc1]
goroutine 1 [running]:
runtime.panic(0x4b32a0, 0x5b1fc8)
/usr/lib/go/src/pkg/runtime/panic.c:266 +0xb6
main.main()
/home/Abhishek/go/src/github.com/blah.go:12 +0x1c1
exit status 2
我该如何调试?
$ go version
go version go1.2.1 linux/amd64
答案 0 :(得分:5)
从运行命令返回的错误对象是nil(这很好!这意味着它成功了!)。但是你正在访问err.Error()
,在零对象上会导致恐慌。
所以
一个。检查err是否为零
湾您只需打印即可,无需致电err.Error()
即。您的代码应如下所示:
out, err := cmd.Output()
if err != nil {
fmt.Println("Error running command:", err)
return
//or even panic here
}
// we only get here if err is nil
fmt.Printf("%s", string(out))