Go 提供一个名为C的伪包(pseudo-package)用来与 C/C++ 语言进行交互操作,这种Go语言与C语言交互的机制叫做 CGO。通过 CGO 我们可以在 Go 语言中调用 C/C++ 代码,也可以在 C/C++ 代码中调用Go语言。CGO 本质就是 Go 实现的 FFI(全称为Foreign function interface,用来描述一种编程语言编写的程序可以调用另一种编程语言编写的服务的机制)解决方案。
当 Go 代码中加入import C语句来导入C这个不存在的包时候,会启动 CGO 特性。此后在 Go 代码中我们可以使用C.前缀来引用C语言中的变量、类型,函数等。启动 CGO 特性时候,需要确保环境变量 CGO_ENABLED 值是1,我们可以通过go env CGO_ENABLED查看该环境变量的值,通过go env -w CGO_ENABLED=1用来设置该环境变量值。