當在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" }
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/276078.html
標籤:其他
