美文网首页
go 结构体赋值 invalid memory address

go 结构体赋值 invalid memory address

作者: 小王同学123321 | 来源:发表于2022-05-27 16:34 被阅读0次

    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 = "xiaowang"
        fmt.Println(user)
    }
    

    运行时会报错


    错误

    3、分析
    Go 中 * 代表取指针地址中存的值,& 代表取一个值的地址。对于指针,我们一定要明白指针储存的是一个值的地址,但本身这个指针也需要地址来储存,初始化指针,指针变量的地址为0xc00009a008, 指针值为nil此时,user 为nil,系统没有给*user 分配地址,相当于给一个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 = "xiaowang"
        fmt.Println(user)
    }
    

    相关文章

      网友评论

          本文标题:go 结构体赋值 invalid memory address

          本文链接:https://www.haomeiwen.com/subject/axniprtx.html