语言的交互性
由于golang和C之间的天生关系,Golang的设计者自然不会忽略如何重用现有的C模块这个问题,这个功能直接被命名为Cgo。Cgo既有语言特性,同时也是一个工具的名称。
在Go代码中,可以按照Cgo的特定语法混合编写C语言代码,然后Cgo公欧可以将这些混合的C代码提取并合并成对于C功能的调用包装代码。开发者基本可以完全忽略golang和C的边界是如何跨越的。
与Java中的JNI不同,Cgo的用法非常简单,示例如下:
package main
/*
#include <stdio.h>
#include <stdlib.h>
*/
import "C"
import "unsafe"
func main(){
cstr :=C.CString(" hello world ")
C.puts(cstr)
C.free(unsafe.Pointer(cstr))
}