go二维map_记一次坑爹的golang 二维map判断问题

博客内容讲述了在Golang中遇到的一个二维Map判断问题,导致数据被意外覆盖。问题出现在当检查二级Key存在性时,错误地使用了直接判断方式。通过修改代码,先检查一级Key是否存在,再判断二级Key,解决了问题。
摘要由CSDN通过智能技术生成

现象

var PeopleLimit =make(map[string]map[string]int64)

func foo(arr1,arr2 string){

if x,ok := PeopleLimit[arr1][arr2];ok{

fmt.Println(" ok")

fmt.Println(x)

}else{

PeopleLimit[arr1] = make(map[string]int64)

fmt.Println(" not ok")

}

//添加新元素

PeopleLimit[arr1][arr2] = time.Now().Unix()

}

func main() {

foo("a","b")

foo("c","d")

foo("a","f")

fmt.Println(PeopleLimit)

return

}

按理应该要输出三个元素,但第一个被覆盖了,定位了很久才发现是二维map的判断问题:

执行foo("a","f")时

if x,ok := PeopleLimit[arr1][arr2];判断是二级key也不存在,但在执行第三次foo("a","f")时,map[a][b]是存在,但map[a][f]不存在,于是,进入else后重新make将map[a]清空了!!

修改后:

var PeopleLimit =make(map[string]map[string]int64)

func foo(arr1,arr2 string){

if x,ok := PeopleLimit[arr1];ok{

//修改点

if y,ok := x[arr2];ok{

fmt.Println(" ok")

fmt.Println(x,y)

}

}else{

PeopleLimit[arr1] = make(map[string]int64)

fmt.Println(" not ok")

}

//添加新元素

PeopleLimit[arr1][arr2] = time.Now().Unix()

}

func main() {

foo("a","b")

foo("c","d")

foo("a","f")

fmt.Println(PeopleLimit)

return

}

---------------------

作者:yinnnnnnn

来源:CSDN

原文:https://blog.csdn.net/qq_35440678/article/details/83154780

版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值