相关疑难解决方法(0)

编组无法从Go访问的C对象

有一些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)

marshalling go cgo

5
推荐指数
1
解决办法
608
查看次数

标签 统计

cgo ×1

go ×1

marshalling ×1