在 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