现代所有主流操作系统几乎都是用C语音实现的,几乎所有高级语言都能调用C语言,例如PHP可以调用C语言写的PHP扩展,Python也可以调用C语言实现的Python扩展。
Golang语言也不例外。
Golang通过CGO机制能很方便的调用C语言。本文介绍一下如何在Go中调用稍稍复杂一点C函数,例如: char* f(int, int*)
首先看一个最简单的例子,将Golang中的一个字符串传入C函数中:
package main
/*
#include
#include
void print(char *str) {
printf("%s\n", str);
}
*/
import "C"
import "unsafe"
func main() {
s := "Hello Cgo"
cs := C.CString(s)
C.print(cs)
C.free(unsafe.Pointer(cs))
}
注意上述程序中的关键语句cs := C.CString(s)是将一个Golang的字符串转换为C语言字符串,该C语言字符串是由C函数malloc从堆中分配的,因此后续需要调用 C.free 释放内存。
然后,我们看看如何调用一个复杂一点的C函数?例如: char* f(int, int*) ,返回一个char*指针,并且有一个参数也是返回值int*。请直接看下面的例子:
package