[Go] 解决golang中出现 panic: runtime error: invalid memory address or nil pointer dereference
2023-02-18 15:41:10 时间
当在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" }
关注公众号"菜地范儿" , 专注后端编程
相关文章
- C++ "链链"不忘@必有回响之双向链表
- C++ STL 概述_严丝合缝的合作者
- C++ 栈和典型的迷宫问题
- C++ 使用栈求解中缀、后缀表达式的值
- C++从 STL 中的队列开始说起
- C++ 不知树系列之初识树
- C++ 不知树系列之认识二叉树(数组、链表存储的实现)
- C++ 不知树系列之二叉排序树(递归和非递归遍历、删除、插入……)
- C++ 不知图系列之基于邻接矩阵实现广度、深度搜索
- C++ 不知图系列之基于链接表的无向图最短路径搜索
- C++不知算法系列之集结基础算法思想
- C++不知算法系列之高精度数值的加、减、乘、除算法
- C++ 不知算法系列之初识动态规划算法思想
- C++ 不知算法系列之深入动态规划算法思想
- C++不知算法系列之排序从玩转冒泡算法开始
- C++ 不知算法系列之从希尔、归并排序算法中的分治哲学聊起
- C++ 数学与算法系列之认识格雷码
- C++数学与算法系列之排列和组合
- C++数学与算法系列之初等数论
- 不背锅运维:云原生下的CICD-3件套快速搭建合集:jenkins+harbor+gitlab