Go to C
导出函数
使用 export
注释:
package main
import "C"
import "fmt"
//export Hello
func 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
类型