Go to C
导出函数
使用 export 注释:
package mainimport "C"import "fmt"//export Hellofunc Hello() {fmt.Println("Hello")}
⚠注意⚠:
//export Hello //export 是一个整体,用于标记导出到 C 语言的 Go 函数,不能用空格分隔开
C to Go
引入接口
在启用cgo的语句上方注释中编辑C代码:
package main
//#include <stdio.h>
import "C"
func main() {
C.puts(C.CString("Hello"))
}
调用引入的函数需要使用 C.xxx ,作为C包的方法引入。
CGO 套娃
根据上述规则,我们可以将 Go 函数导出到 C 然后再使用 CGO 调用这个函数,打印一个字符串的例程如下:
package main
/*
#include "hello.h"
*/
import "C"
import "fmt"
//export PrintHelloGo
func PrintHelloGo() {
fmt.Println(C.GoString(C.CString("Hello Go")))
}
其中比较关键的:
C.CString将 Gostring类型转化成 CGO*C.char类型C.GoString将 CGO*C.char类型转化成 Gostring类型
