什么是Cgo
简单的说,就是自C语言出现,已经累积了无数功能强大、性能卓越的C语言代码库,可以说难以替代;在现代编程语言中,如何方便快捷的使用这些C语言库,成了它们一个必须重视的话题。
就连JAVA这个重视面向对象的语言也提供了JNI机制以调用C语言库;
所以,Go语言也支持了这一功能,就是Cgo。
来看一段Cgo的hello world:
package main
/*
#include <stdio.h>
void hello() {
printf("Hello world !");
}
*/
import "C"
func main() {
C.hello()
}
小伙子,看完这段代码,你是否有很多问号???
- 这个大写的C包是什么?
- 为什么import前面有一段C语言代码,还被写在注释里?
实际上,根本不存在一个名为C的包,这个import "C"
语句其实是告诉Cgo该起床工作了;做什么呢,就是将import "C"
前的那段C语言代码的注释生成包装性质的Go代码。
编译Cgo程序
编译Cgo程序非常simple,将他当成普通Go程序编译就好了;因为在构建过成中Go工具集能自动识别和处理带有Cgo代码的Go源代码文件。