当前位置:首页 > 编程笔记 > 正文
已解决

go sync.Map包装过的对象nil值的判断

来自网友在路上 158858提问 提问时间:2023-09-27 20:26:12阅读次数: 58

最佳答案 问答题库588位专家为你答疑解惑

被sync.Map包装过的nil 对象,是不能直接用if xxx == nil的方式来判断的

func testnil() *interface{} {return nil
}func main() {var ptr *interface{}test := testnil()//p = &Person{}fmt.Printf("ptr 的值为 : %v\n", ptr)fmt.Printf("ptr 的值为 : %#v\n", ptr)println(ptr == nil)println(test == nil)var testany *interface{}println(test == testany)var maptest sync.Mapmaptest.Store("a", test)test3, _ := maptest.Load("a")println(test3 == nil)println(test == testany)//s := &Person{//	name: "1",//}////ss := (*any)(s)
}

结果:

ptr 的值为 : <nil>
ptr 的值为 : (*interface {})(nil)
true
true
true
false
true

断点截图:
在这里插入图片描述
map load的源码:
在这里插入图片描述

maptest.Store(“a”, test)设置进去的是*interface{},但是取出来的其实是interface{}|interface{},说明被包装了一层,相当于返回一个对象,对象内容是interface{},所以不能直接和nil做比较。

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"go sync.Map包装过的对象nil值的判断":http://eshow365.cn/6-14851-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!