CGO in Go

最近有一个业务需求,将C++数据接口导入结果的报错信息存储下来,如果使用简单Text文本去存储,可以保留的信息虽然不会变少,但是可读性没有富文本来的可读性强,但是在C++中直接实现富文本输出会比用Golang或者其他语言来的方便,于是我便进行了一次CGO的尝试。

Golang的CGO可以将Golang代码编译成shared library,并生成C++头文件,方便C++端使用,我的思路是将C++接口中的错误信息转换成JSON, 然后使用Go生成的库进行解析并generate成PDF或者Excel Word 之类的富文本文件,下面我将记录一个简单转换JSON串的demo来演示。

首先我们必须保证开发环境中CGO处于Enabled的状态,具体可以使用go env 查看

我们创建一个叫做jsonparser.go的文件,内容为以下:

jsonparser.go

在代码中我们需要注意首先需要导入 “C” 库,这非常重要,其次我们需要将暴露出来的函数上面添加注释(添加如图所示就行,我站点的图片全部为webp格式,如果加载不出来 请使用非Safari浏览器),注意暴露出来的函数函数名必须为大写字母开头,这个和Go的package一样,暴露给外部的函数必须是大写!

接下来我们来Compile一下这段代码,(我的环境是OS X)使用 go build -o jsonparser.dylib -buildmode=c-shared jsonparser.go 执行结束之后,我们可以获得jsonparser.dylib 和 jsonparser.h文件

jsonparser.h

创建一个测试main.cpp文件

main.cpp

使用这条命令进行编译: g++ main.cpp jsonparser.dylib -o main

执行main 程序测试

获取更多信息,可以参考golang官方文档: https://blog.golang.org/cgo