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

时间:2015-02-26 05:27:35

标签: 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.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

1 个答案:

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