在Go语言中,CGO容许Go程序间接调用C语言代码。这是通过链接Go和C语言的二进制代码来实现的。这样,Go程序能够应用C语言的库,或者在性能要害的中央应用C语言代码。
CGO的引入
要在Go程序中应用CGO,你须要导入 "C" 包:
import "C"
这个 "C" 包是一个非凡的包,它不真正存在于Go的规范库中。当编译器看到这个导入语句时,它会启动CGO。
C语言代码的嵌入
在导入"C"之后,你能够在正文中嵌入C语言代码。这个C语言代码会在编译时被编译器提取进去,而后与Go代码一起链接。
例如,你能够这样嵌入一个C语言函数:
/*#include <stdio.h>void myprint(char* s) { printf("%s\n", s);}*/import "C"
这段代码会嵌入一个C语言的 myprint
函数,这个函数承受一个字符串参数,而后打印它。
C语言函数的调用
嵌入的C语言函数能够像一般的Go函数一样调用。例如,你能够这样调用 myprint
函数:
func main() { C.myprint(C.CString("Hello, CGO"))}
留神,咱们必须应用 C.CString
函数将Go字符串转换为C字符串,因为C字符串和Go字符串在内存中的示意是不同的。
C语言库的链接
CGO还容许链接C语言的库。例如,你能够链接规范的C库 libc
:
/*#cgo LDFLAGS: -lc#include <stdio.h>*/import "C"
#cgo LDFLAGS: -lc
指令通知编译器链接 libc
库。而后,你就能够调用 libc
库中的函数了。
总的来说,CGO是一个弱小的工具,它让Go程序能够间接调用C语言代码。然而,你须要留神CGO的应用会减少编译工夫,同时也会使得程序的移植性变差。因而,除非必要,否则应尽量避免应用CGO。
举荐浏览:
https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA
https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g