When a property or method is called on nil, a null pointer will be reported
Especially the structure pointer, this problem is very easy to occur, the following is the test code
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)
}
Return separately
<nil>,{},&{},&{}
When a structure pointer variable var conn *MConn is declared, but it is not initialized and the property is called directly, it will appear
panic: runtime error: invalid memory address or nil pointer dereference
Because conn is nil at this time, it is a null pointer
A null operation must be performed, if conn != nil {}
Of course, we sometimes do not make such an obvious error, but when we cooperate with map, this error may occur unintentionally.
var mMap map[ string ]* MConn
m1: = mMap[ " name " ]
m1.Name = " qqq "
In this code map, when the key element does not exist, the zero value of value is returned, which happens to be *MConn. The zero value is nil, and an error will also be reported.
So the map has to be judged here
var mMap map[ string ]* MConn
m1, ok: = mMap[ " name " ]
if ok {
m1.Name = " qqq "
}