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