什么是Cgo


简单的说,就是自C语言出现,已经累积了无数功能强大、性能卓越的C语言代码库,可以说难以替代;在现代编程语言中,如何方便快捷的使用这些C语言库,成了它们一个必须重视的话题。

就连JAVA这个重视面向对象的语言也提供了JNI机制以调用C语言库;

所以,Go语言也支持了这一功能,就是Cgo。

来看一段Cgo的hello world:

package main
/*
#include 
void hello() {
 printf("Hello world !");
}
*/
import "C"

func main() {
	C.hello()
}

小伙子,看完这段代码,你是否有很多问号???

  • 这个大写的C包是什么?
  • 为什么import前面有一段C语言代码,还被写在注释里?
  • 不是说包内类型的可见性是由首个字母的大小写决定的吗?为什么这里能够使用C包里以小写字母开头的函数和类型呢?

实际上,根本不存在一个名为C的包,这个 import "C" 语句其实是告诉Cgo该起床工作了;做什么呢,就是将 import "C" 前的那段C语言代码的注释生成包装性质的Go代码。

编译 Cgo 程序

编译Cgo程序非常simple,将他当成普通Go程序编译就好了;因为在构建过成中Go工具集能自动识别和处理带有Cgo代码的Go源代码文件。


本文版权归作者所有!

如需转载,请注明出处;本文地址:https://www.perfcode.com/p/what-is-cgo.html