关于人工智能:go语言521-CGO的基本概念

40次阅读

共计 863 个字符,预计需要花费 3 分钟才能阅读完成。

在 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

正文完
 0