1、前言
日常生产中,当我们使用go指针结构体赋值时,会报出invalid memory address or nil pointer dereference错误,那错误是如何产生的呢,我们该如何解决呢
2、举例
看一下例子
package main
import "fmt"
type User struct {
UserName string `json:"user_name"`
Password string `json:"password"`
}
func main() {
var user *User
user.UserName = "张三"
user.Password = "zhangsan"
fmt.Println(user)
}
当我们运行这个实例时,就会发现错误
3、分析
我们要了解指针,指针地址在 Go 中 * 代表取指针地址中存的值,& 代表取一个值的地址。对于指针,我们一定要明白指针储存的是一个值的地址,但本身这个指针也需要地址来储存,初始化指针,指针变量的地址为0xc00009a008, 指针值为nil此时,i为nil,系统没有给*i分配地址,相当于给一个nil地址赋值,肯定会出错
4、解决
直接给我们定义的指针结构体初始一下内存地址,当我们赋值的时候指向我们重新分配的地址,就可以解决这个问题啦
package main
import "fmt"
type User struct {
UserName string `json:"user_name"`
Password string `json:"password"`
}
func main() {
var user *User
user = new (User)
user.UserName = "张三"
user.Password = "zhangsan"
fmt.Println(user)
}
正常运行