我正在尝试使用 cgo 从 GO 调用 C 库。
C 库具有以下功能:
int receive(void** data);
// I'd call it like that:
void* myptr; // myptr=null
int nbBytes = receive(&myptr);
if (nbBytes==0) { return }
// myptr has now an address to a valid buffer that contains nbBytes bytes.
// And then casting it with char* to access the data that can be anything. Example:
printf("%d", *(char*)myptr);
如何receive()
从 GO 调用此函数?Go 不分配任何内存,内存地址通过它返回myptr
并直接从中访问。
receive()
是“无副本”并将实际数据的地址写入myptr
. 然后使用 访问数据*(char*)myptr
。
我们可以假设receive()
分配和释放缓冲区,它对 lib 的用户隐藏
理想情况下,我会通过[]byte
in go 读取数据。
隔江千里
相关分类