在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