有一些C对象,如联合,包含位域的结构和结构与Go的ABI不同的结构,无法从Go访问.其中一些结构无法更改为可从Go代码访问,因为它们是现有库的API的一部分.
为了将这些对象编组到Go结构中,我们因此无法真正使用Go代码.相反,我必须在C中编写编组代码.这很好但我没有找到一种可行的方法来定义对Go代码中定义的类型进行操作的C函数.现在我正在定义我在C端编组的数据类型,并在我的Go代码中使用这些数据类型.
如果我想在我的Go代码中将编组类型公开为API,这真的很讨厌,因为我不能将C类型作为我的包接口的一部分公开.我当前的方法涉及将已编组的对象重新编组为Go代码中定义的类型.
是否有更优雅的方式来做我想做的事情,即将无法从Go代码访问的C结构编组为Go代码中定义的数据类型?
根据评论部分的要求,这里是无法从Go访问的C对象的集合.
#include <complex.h>
#include <stdbool.h>
union foo {
int i;
float f;
};
struct bar {
bool x:1;
unsigned int y:3;
unsigned int z:4;
};
struct baz {
float f;
complex float c;
};
#pragma pack 1
struct quux {
char c;
short s;
int i;
};
Run Code Online (Sandbox Code Playgroud)