CGO
CGO可以让golang和c互相调用,譬如x264或者aac编解码,用go再实现一遍比较麻烦,直接调用c的函数会更合适。
CGO可以直接用C的代码,或者C的静态库,或者动态库,当然C++也是可以的。
在import “C”之前加preamble(注释),包含头文件。这样在C这个命名空间中就可以用C的函数了。
这个C包,实际上是个伪包,导入后会解析前面的preamble,用到头文件定义的类型、变量和函数。
preamble中可以有include,代码,宏定义,编译条件;静态变量不可用,静态函数可用。
编译条件是用#cgo指定的,包括CFLAGS、CPPFLAGS、CXXFLAGS、LDFLAGS。
cgo指令还可以用一些变量,譬如${SRCDIR}用来链接静态库。
下面是个C++导出的库:
// winlin.h
#ifdef __cplusplus
extern "C"{
#endif
// get the version.
extern int winlin_version();
#ifdef __cplusplus
}
#endif
// winlin.cpp
// g++ -c -o winlin.o winlin.cpp && ar -rs winlin.a winlin.o
#include "winlin.h"
int winlin_version(