C структура:
typedef struct info_s {
int len;
uint8_t *num;
}info_t;
extern int info_collect(int unit, info_t *info,
data_t *data);
Go Wrapper:
type Info struct {
Len int
num []uint8
}
//Method to convert C.info_t => Info
func (inf C.info_s) Info() Info {
var tInf Info
tInf.Len = int(inf.len)
for i := 0; i < int(tInf.Len); i++ {
tInf.num[i] = uint8(inf.num[i])
}
return Info{
Len: int(inf.len),
Info: (*C.uchar)(unsafe.Pointer(&info.num[0])),
}
}
Как мне получить доступ к uint8_t *num
из go wrapper?
Я не думаю, что метод определен правильно.
Является ли структура для num - (num []uint8
) правильным способом доступа к этому?
Добавление недостающего фрагмента головоломки. В C также есть API, который принимает структуру C в качестве входных данных.
Теперь, когда я вызываю этот API, у меня возникает паника во время выполнения:
data := []uint8{1, 2, 3}
var inf = new(C.info_t)
inf.len = 64
inf.num = data
C.info_collect(C.int(unit), (*C.info_t)(unsafe.Pointer(&info)),
(*C.data_t)(unsafe.Pointer(&data)))
Panic: runtime error: cgo argument has Go pointer to Go pointer