Я пытаюсь взаимодействовать с некоторым кодом C от Go. Используя cgo, это было относительно прямолинейно, пока я не попал в этот (довольно распространенный) случай: нужно передать указатель на структуру, которая сама содержит указатель на некоторые данные. Я не могу понять, как это сделать от Go, не прибегая к созданию структуры в сам код C, который я бы предпочел не делать. Вот отрывок, который иллюстрирует эту проблему:Как я могу заполнить указатель void * C в Go?
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 врывается в структуру, копирует то, что ему нужно, а затем возвращает).
Спасибо. Вот что я в итоге ... Я просто надеялся на что-то немного менее подробное. –