Golang中无效的内存地址或无指针取消引用是什么,我该如何解决?

时间:2017-12-01 20:47:02

标签: go

我收到以下错误:

  

恐慌:运行时错误:无效的内存地址或无指针   dereference [signal 0xb code = 0x1 addr = 0x0 pc = 0x400da9]

     

goroutine 125 [running]:runtime.panic(0x697480,0x850d13)       /usr/lib/go/src/pkg/runtime/panic.c:279 + 0xf5 main.concurrent(0x25e5)       /home/ytn/go/src/listner/start.go:19 + 0x1a9由main.main创建       /home/ytn/go/src/listner/init.go:51 + 0x224

如何解决此问题?避免此类错误的最佳做法是什么?

   for i := n; i < n+11; i++ {
            user,  err := s.GetUser(i)
            fmt.Sprint(user.Username) //This is line 19
            if err != nil && user != nil {
              continue
           }
     } defer wg.Done()

1 个答案:

答案 0 :(得分:1)

很难说如何在不看代码的情况下修复它,但基本上它意味着你有一个nil的指针,并且你试图得到它指向的值:

var x *MyStruct
fmt.Println(*x)

要修复它,你需要在解除引用之前检查它是否为零:

var x *MyStruct
if x != nil {
    fmt.Println(*x)
}

或让它实际指向一个值

var x *int
x = &MyStruct{}
fmt.Println(*x)