我正在使用一個(gè)名為GEOS的C庫(kù),它提供了一個(gè)C支持的實(shí)現(xiàn)來(lái)處理幾何操作。在某些反射操作期間使用了包含此 C 類(lèi)型的結(jié)構(gòu),但在升級(jí)到 Go v1.15.4(或之后的任何版本)時(shí),這會(huì)導(dǎo)致死機(jī)。我已經(jīng)隔離了這個(gè)問(wèn)題,并且似乎當(dāng)使用反射來(lái)創(chuàng)建新的反射時(shí),后續(xù)調(diào)用的結(jié)果在:TypeValueInterface()panic: bad indirvar test *C.GEOSGeometryreflectType := reflect.ValueOf(test).Type().Elem()value := reflect.New(reflectType)// Panics in 1.15.4+value.Interface()實(shí)際的恐慌來(lái)自?xún)?nèi)部,發(fā)生以下情況:func packEfacereflect/value.goswitch { case ifaceIndir(t): if v.flag&flagIndir == 0 { // here v.flag = 22 and flagIndir = 128 panic("bad indir") } ...看起來(lái)我在這里做的事情是不正確的,還是更有可能這是一個(gè)錯(cuò)誤引入的?1.15.4
1 回答

森林海
TA貢獻(xiàn)2011條經(jīng)驗(yàn) 獲得超2個(gè)贊
我向 Golang GitHub 報(bào)告了此問(wèn)題
經(jīng)過(guò)進(jìn)一步調(diào)查,在C代碼中,被定義為不完整的結(jié)構(gòu)類(lèi)型:GEOSGeometry
typedef struct GEOSGeom_t GEOSGeometry;
開(kāi)發(fā)人員創(chuàng)建了一個(gè)補(bǔ)丁,使得它在更好的地方失敗,而不是在調(diào)用時(shí)隨機(jī)恐慌Interface()
- 1 回答
- 0 關(guān)注
- 108 瀏覽
添加回答
舉報(bào)
0/150
提交
取消