我正在使用一個名為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個贊
經過進一步調查,在C代碼中,被定義為不完整的結構類型:GEOSGeometry
typedef struct GEOSGeom_t GEOSGeometry;
開發人員創建了一個補丁,使得它在更好的地方失敗,而不是在調用時隨機恐慌Interface()
- 1 回答
- 0 關注
- 123 瀏覽
添加回答
舉報
0/150
提交
取消
