Golang踩坑——判断map中是否有key

本文记录了一次在Golang中遇到的map使用陷阱,通过示例代码展示了如何检查map中是否存在某个key,避免引发nil指针错误。问题在于使用`a, ok := map[key]`时,即使`ok`为false,`a`仍会被赋值为nil,导致后续操作出错。解决方案是仅检查`ok`,忽略`a`的值,即`_, ok := map[key]`。" 105420680,8524623,Python OpenCV:图像缩放与翻转,"['Python', '计算机视觉', 'OpenCV']
摘要由CSDN通过智能技术生成

最近在实习,下班回去十点多了,再加上比较懒,快有两个月没写东西了。今天在开发一个模块的时候是接着上一个人的写的,好不容易各种配置写好了开始跑,发现他踩了一个很容易踩的坑。


把bug抽出来单独写了个文件。

package main

import (
	"log"
)

type agent struct {
	id  int
	str string
}

var m map[int]*agent

func main() {
	m = make(map[int]*agent)
	a := &agent{
		id:  1,
		str: "hello",
	}
	log.Println(a)
	var ok bool
	if a, ok = m[1]; ok {
		log.Println("ok")
	}
	m[1] = a
	log.Println(a)
	log.Println(a.str)
}

运行一下

可以看到报了无效指针的问题(invalid memory address or nil pointer dereference)。从上面的两个log可以看到,最开始指针是有值的,第二个却没了,原因就出现在那个if判断那里。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值