當在nil上調用一個屬性或者方法的時候 , 會報空指針
尤其是結構體指針 , 非常容易出現這個問題 , 下面是測試代碼
package tools
import "fmt" func MyTest() { type MConn struct { Name string } var conn *MConn var conn2 MConn conn3 := new(MConn) conn4 := &MConn{} fmt.Printf("%v,%v,%v,%v", conn, conn2, conn3, conn4) }
分別返回
<nil>,{},&{},&{}
當聲明了一個結構體指針變量var conn *MConn , 但是沒有初始化 , 直接調用屬性時候 , 就會出現
panic: runtime error: invalid memory address or nil pointer dereference
因為conn這個時候是 nil , 是個空指針
一定要進行判空操作 , if conn != nil {}
當然我們有時候不會出現這么明顯的錯誤 , 但是在和map進行配合時 , 無意中可能會出現這個錯誤
var mMap map[string]*MConn m1 := mMap["name"] m1.Name = "qqq"
這個代碼map中 , 當key元素不存在時 , 返回的是value的零值 , 恰好是*MConn 零值是nil , 也會報錯
所以map這里也要進行判斷
var mMap map[string]*MConn m1, ok := mMap["name"] if ok { m1.Name = "qqq" }
關注公眾號"菜地范兒" , 專注后端編程