mzzsfy
(SVIP)
1
已经判断了是否为nil,结果还是报错空指针
panic: runtime error: invalid memory address or nil pointer dereference
我知道golang 的interface==nil的行为是内部类型和值都为空才是nil,但是我要怎么声明一个interface,type为int,值为nil,问了gpt啥的都回复的不对,太难了
这代码运行在高并发环境,疑似内存同步问题,实际上我使用debug查看 next.arr[idx]其实是非空的
代码如图
这时候v的值
1 个赞
mzzsfy
(SVIP)
3
顺便补充,这种情况网常见说法
a==nil||(reflect.ValueOf(a).Kind() == reflect.Ptr && reflect.ValueOf(a).IsNil())
也是不好用的
go的interface太难了
wlg
(🐢)
6
当数组有保存过int时,就不可能为nil了,要么取出时自己重置为nil
mzzsfy
(SVIP)
7
type layer struct {
id uint64
arr []
any
_ [cpuCacheKillerPaddingLength]byte
next unsafe.Pointer
take uint32
}
你确定吗,我怎么感觉我学的不是跟你同一个东西
wlg
(🐢)
8
看了下代码,你这情况应该不会出现才对,arr的interface数组默认都是nil,设置过就是int值,不存在type=int, data=nil的情况,泛型优化了?
mzzsfy
(SVIP)
9
我估计是内存同步问题,勉强能算go的bug,没办法