从 Go 调用 C 函数
Cgo 支持创建调用 C 代码的 Go 包。
要使用 cgo
写入导入伪包 C
的普通 Go 代码。然后,Go 代码可以引用诸如 C.int
之类的类型,或者诸如 C.Add
之类的函数。
导入 C
之前会有一个注释,该注释称为前导码,在编译包的 C 部分时用作标题。
请注意,cgo
注释和 import 语句之间不能有空行。
请注意,import "C"
不能与其他导入组合成带括号的因式导入语句。你必须编写多个 import 语句,例如:
import "C"
import "fmt"
对于其他导入,使用 factored import 语句是一种很好的方式,例如:
import "C"
import (
"fmt"
"math"
)
使用 cgo
的简单示例:
package main
//int Add(int a, int b){
// return a+b;
//}
import "C"
import "fmt"
func main() {
a := C.int(10)
b := C.int(20)
c := C.Add(a, b)
fmt.Println(c) // 30
}
然后 go build
,运行它,输出:
30
要建立 cgo
包,只需像往常一样使用 go build
或 go install
。go tool
识别特殊的 C
导入,并自动将 cgo
用于这些文件。