我正試圖與Go的一些C代碼接口。使用cgo,直到我遇到這種情況時(相當常見),這是相對直截了當的:需要將指針傳遞給本身包含指向某些數據的指針的結構。我似乎無法弄清楚如何從Go中做到這一點,而不是將結構的創建放入C代碼本身,我不希望這樣做。這裏是一個說明該問題的片段:如何在Go中填寫void * C指針?
package main
// typedef struct {
// int size;
// void *data;
// } info;
//
// void test(info *infoPtr) {
// // Do something here...
// }
import "C"
import "unsafe"
func main() {
var data uint8 = 5
info := &C.info{size: C.int(unsafe.Sizeof(data)), data: unsafe.Pointer(&data)}
C.test(info)
}
這枚編譯罰款,試圖運行它導致:
panic: runtime error: cgo argument has Go pointer to Go pointer
在我的情況下,數據被傳遞給C調用不堅持過去的呼籲(即所討論的C代碼挖掘到結構,複製它需要的東西,然後返回)。
謝謝。這就是我最終的結局......我只是希望稍微詳細一點。 –