Go 包
本小节将向你提供将在 C 程序中使用的 Go package 的代码。 Go package 的名称必须是main
,但其文件名可以是你想要的任何名称;在这我们将文件命名为为useByC.go
,并分为三部分。
Tip: 你将在第 6 章-你可能不了解 Go package 和 Go 函数中了解有关 Go package 的更多信息。
第一部分代码:
package main
import "C"
import (
"fmt"
)
正如我之前所说,必须将 Go 包命名为main
。你还需要在 Go 代码中导入 C 包。
第二部分代码:
//export PrintMessage
func PrintMessage() {
fmt.Println("A Go function!")
}
必须将 C 代码准备调用的 Go 函数导出。这意味着你应在导出之前放置一个以// export
开头的注释行。在// export
的后面你将需要输入函数的名称,因为这是 C 代码将使用的名称。
最后一部分代码:
//export Multiply
func Multiply(a, b int) int {
return a * b
}
func main() {
}
usedByC.go
的main()
函数不需要代码,因为它不会被导出,因此不会被 C 程序使用。此外,由于还希望导出Multiply()
函数,因此需要写上// export Multiply
。
之后,你需要通过执行以下命令从 Go 代码生成 C 共享库:
$ go build -o usedByC.o -buildmode=c-shared usedByC.go
前面的命令将生成两个名为usedByC.h
和usedByC.o
的文件:
$ ls -l usedByC.*
-rw-r--r--@ 1 mtsouk staff 204 Jan 10 09:17 usedByC.go
-rw-r--r-- 1 mtsouk staff 1365 Jan 22 22:14 usedByC.h
-rw-r--r-- 1 mtsouk staff 2329472 Jan 22 22:14 usedByC.o
$ file usedByC.o
usedByC.o: Mach-O 64-bit dynamically linked shared library x86_64
你不应对 usedByC.h 进行任何更改。
Last updated
Was this helpful?