运行go代码时出现运行时错误

运行go代码时出现运行时错误,go,Go,我正在尝试运行一个简单的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.Er

我正在尝试运行一个简单的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

运行命令返回的错误对象为nil(这很好!这意味着它成功了!)。但是您正在访问
err.Error()
,在nil对象上访问它会导致这种恐慌

所以

a。检查err是否为零

b。您只需打印它,无需调用
err.Error()

i、 e.您的代码应该如下所示:

    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))

在使用cmd.Output的结果之前,您应该检查cmd.Output返回的错误。谢谢,在错误检查之后工作!谢谢你的解释。我的菜鸟错误:)