在 Go 语言开篇中我们已经知道,Go 语言与 C 语言之间有着千丝万缕的关系,甚至被称之为 21 世纪的C语言。

所以在 Go 与 C 语言互操作方面,Go 更是提供了强大的支持。尤其是在 Go 中使用 C,你甚至可以直接在 Go 源文件中编写 C 代码,这是其他语言所无法望其项背的。

格式:

  • 在 import "C" 之前通过单行注释或者通过多行注释编写C语言代码
  • 在 import "C" 之后编写 Go 语言代码
  • 在Go语言代码中通过 C.函数名称() 调用 C 语言代码即可

注意:import "C" 和前面的注释之间不能出现空行或其它内容,必须紧紧相连

package main
//#include <stdio.h>
//void say(){
// printf("Hello World\n");
//}
import "C"

func main()  {
	C.say()
}
package main
/*
#include <stdio.h>
void say(){
	printf("Hello World\n");
}
*/
import "C"

func main()  {
	C.say()
}
  • Go 语言中没有包名是C的包,但是这个导入会促使 Go 编译器利用 cgo 工具预处理文件
  • 在预处理过程中,cgo 会产生一个临时包,这个包里包含了所有 C 函数和类型对应的 Go 语言声明
  • 最终使得 cgo 工具可以通过一种特殊的方式来调用 import "C" 之前的 C 语言代码

常规问题:

cc1.exe: sorry, unimplemented: 64-bit mode not compiled in