如何在Go端构造C结构?

时间:2015-06-19 09:18:23

标签: go cgo

我需要调用一个需要struct指针作为参数的C函数。 这是C代码:

struct Position
{
    uint64_t index;
    uint64_t offset;
};

int read(const char* filename, const Position* pos, const char** data)

所以在Go代码中,我认为我必须使用malloc内存来构造一个Position对象并将其指针传递给C函数。也许我还需要释放记忆。这似乎是C.CString()所做的。那我该怎么办呢?有代码示例吗? THX。

1 个答案:

答案 0 :(得分:-1)

如何通过生成的存根清除golang中的call c。使用go build -work src/main.go生成存根并获取工作目录。在_obj/_cgo_gotypes.go文件中找到函数原型。 即我可以获得以下生成的存根:

type _Ctype_Position _Ctype_struct__Position
type _Ctype_struct__Position struct {
//line :1                                                                                                                                                                                                           
    index   _Ctype_int
//line :1                                                                                                                                                                                                           
    offset  _Ctype_int
//line :1                                                                                                                                                                                                           
}
func _Cfunc_read(p0 *_Ctype_char, p1 *_Ctype_struct__Position, p2 **_Ctype_char) (r1 _Ctype_int)

如果我有这样的c头文件:

typedef struct _Position
{
  int index;
  int offset;
}Position;

extern int read(const char* filename, const Position* pos, const char** data);

BTW你需要在go source中引用c函数来为go build创建一个依赖项来生成引用的函数stub。