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.gomain()函数不需要代码,因为它不会被导出,因此不会被 C 程序使用。此外,由于还希望导出Multiply()函数,因此需要写上// export Multiply

之后,你需要通过执行以下命令从 Go 代码生成 C 共享库:

$ go build -o usedByC.o -buildmode=c-shared usedByC.go

前面的命令将生成两个名为usedByC.husedByC.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