作为直接继承于C的语言,Go提供了与C语言交互的功能,称为Cgo。先来看看一个例子:
直接运行 go run命令即可.
事实上,根本就不存在一个名为C的包。这个import语句其实就是一个信号,告诉Cgo它应该开始工作了。做什么事情呢?就是对应这条import语句之前的块注释中的C源代码自动生成包装性质的Go代码。
这时候我们该注意到import语句前紧跟的注释了。这个注释的内容是有意义的,而不是传统意义上的注释作用。这个例子里用的是一个块注释,实际上用行注释也是没问题的,只要是紧贴在import语句之前即可。比如下面也是正确的Cgo写法:
1.类型映射
在跨语言交互中,比较复杂的问题有两个:类型映射以及跨越调用边界传递指针所带来的对象生命周期和内存管理的问题。对于C语言的原生类型,Cgo都会将其映射为Go语言中的类型:
·C.char和C.schar===>signed char
·C.uchar===========>unsigned char
·C.short和C.ushort=>unsigned short