准备工作
在使用cgo特性之前,需要安装C/C++构建工具链,在macOS和Linux下是要安装gcc,在windows下是需要安装MinGW工具。
基于C标准库函数
package main
/*#include <stdlib.h>*/
import "C"import (
"fmt"
"time")func main() {
C.srandom(C.uint(time.Now().UTC().UnixNano()))
for i := 0; i < 10; i++ {
fmt.Printf("%d ", int(C.random()))
}
fmt.Println()}
代码通过import "C"语句启用cgo特性,go build命令会在编译和链接阶段启动gcc编译器。
使用自己的C函数
package main
/*#include <stdio.h>static
void SayHello(const char* s) {
puts(s);
}
*/
import "C"
func main() {
C.SayHello(C.CString("Hello, World"))
}
也可以将SayHello函数放到当前目录下的一个C语言源文件中(后缀名必须是.c)。
package main
//void SayHello(const char* s);
import "C"
func main() {
D.SayHello(C.CString("Hello, World"))
}
值得一提的是cgo的原理是调用本地的c代码,如果是需要将go代码运行在虚拟机的情况,则cgo特性无法发挥。