返回介绍

02.5.1 Go Package

发布于 2024-08-14 12:50:32 字数 3680 浏览 0 评论 0 收藏 0

Go Package

本节将展示C示例程序用到的 Go package 代码。 Go package 的名字必须是 main ,但是文件名可以随意,我们的例子中,文件名是 usedByC.go ,分三部分展示。

你可能不了解 Go package 机制,在第六章会详细的介绍。

第一部分的 Go package 代码:

> package main
> 
> import "C"
> 
> import (
>     "fmt"
> )

前面提到, Go package 的名字必须是 main ,同样的也需要导入"C" package

第二部分的代码如下:

> //export PrintMessage
> func PrintMessage() {
>     fmt.Println("A Go function!")
> }

如果一个Go函数想要被C语言调用,必须要先导出。你应该在函数实现的开始部分,添加一行以 export 开头的注释, export 后面要加上函数的名字,这样C程序才知道怎么使用。

最后一部分的代码:

> //export Multiply
> func Multiply(a, b int) int {
>     return a * b
> }
> func main() {
> }

这个 main() 函数不需要任何的函数体,因为不需要导出给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
> -rw-r--r-- 1 mtsouk staff
> 1365
> -rw-r--r-- 1 mtsouk staff 2329472
> $ file usedByC.o
> usedByC.o: Mach-O 64-bit dynamically
> Oct 31 20:37 usedByC.go
> Oct 31 20:40 usedByC.h
> Oct 31 20:40 usedByC.o
> linked shared library x86_64

注意:不要修改 usedByC.h 文件。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文