zoukankan      html  css  js  c++  java
  • [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"
        }

    关注公众号"菜地范儿"  , 专注后端编程

    开源作品

    GO-FLY,一套可私有化部署的免费开源客服系统,安装过程不超过五分钟(超过你打我 !),基于Golang开发,二进制文件可直接使用无需搭开发环境,下载zip解压即可,仅依赖MySQL数据库,是一个开箱即用的网页在线客服系统,致力于帮助广大开发者/中小站长快速整合私有客服功能
    github地址:go-fly
    官网地址:https://gofly.sopans.com

    赞赏作者

    微信交流

  • 相关阅读:
    setprecision和setiosflags函数
    free和malloc的使用
    栈内存与堆内存
    一个教科书一般的“空指针”错误
    孙鑫教程第三章小测试程序
    向函数传递结构体信息
    指针(二)
    指针(一)
    cocos2d场景和UIViewController视图的切换
    UIScrollView 原理详解
  • 原文地址:https://www.cnblogs.com/taoshihan/p/14656632.html
Copyright © 2011-2022 走看看