已解决
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 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!