为了账号安全,请及时绑定邮箱和手机立即绑定

Reflect Value.Interface() panic: v1.15.4 之后 CGo

Reflect Value.Interface() panic: v1.15.4 之后 CGo

Go
富国沪深 2022-08-24 15:46:05
我正在使用一个名为GEOS的C库,它提供了一个C支持的实现来处理几何操作。在某些反射操作期间使用了包含此 C 类型的结构,但在升级到 Go v1.15.4(或之后的任何版本)时,这会导致死机。我已经隔离了这个问题,并且似乎当使用反射来创建新的反射时,后续调用的结果在:TypeValueInterface()panic: bad indirvar test *C.GEOSGeometryreflectType := reflect.ValueOf(test).Type().Elem()value := reflect.New(reflectType)// Panics in 1.15.4+value.Interface()实际的恐慌来自内部,发生以下情况:func packEfacereflect/value.goswitch {    case ifaceIndir(t):        if v.flag&flagIndir == 0 {   // here v.flag = 22 and flagIndir = 128            panic("bad indir")        }        ...看起来我在这里做的事情是不正确的,还是更有可能这是一个错误引入的?1.15.4
查看完整描述

1 回答

?
森林海

TA贡献2011条经验 获得超2个赞

我向 Golang GitHub 报告了此问题

经过进一步调查,在C代码中,被定义为不完整的结构类型:GEOSGeometry

typedef struct GEOSGeom_t GEOSGeometry;

开发人员创建了一个补丁,使得它在更好的地方失败,而不是在调用时随机恐慌Interface()


查看完整回答
反对 回复 2022-08-24
  • 1 回答
  • 0 关注
  • 80 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信