[Go] 解決golang中出現 panic: runtime error: invalid memory address or nil pointer dereference


當在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"
    }

關注公眾號"菜地范兒"  , 專注后端編程

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM