From cfa80db8b6078268a1198280eeb94b004afb22a2 Mon Sep 17 00:00:00 2001 From: wahaha Date: Sat, 16 Jun 2018 19:23:57 +0800 Subject: [PATCH 1/3] =?UTF-8?q?ch2-01-=E6=94=B9=E9=94=99=E8=AF=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ch2-cgo/ch2-01-hello-cgo.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch2-cgo/ch2-01-hello-cgo.md b/ch2-cgo/ch2-01-hello-cgo.md index 5aef6f2..4e3fd63 100644 --- a/ch2-cgo/ch2-01-hello-cgo.md +++ b/ch2-cgo/ch2-01-hello-cgo.md @@ -4,7 +4,7 @@ ## 最简CGO程序 -真实的CGO程序一般都比较复杂。不过我们可以反其道而行之,一个最简的CGO程序该是什么样的呢?要构造一个最简CGO程序,首先要去掉一起复杂的CGO特性,同时要展示CGO程序和纯Go程序的差别来。下面是我们构建的最简CGO程序: +真实的CGO程序一般都比较复杂。不过我们可以反其道而行之,一个最简的CGO程序该是什么样的呢?要构造一个最简CGO程序,首先要去掉一些复杂的CGO特性,同时要展示CGO程序和纯Go程序的差别来。下面是我们构建的最简CGO程序: ```go import "C" From 3ff6888c4fdba54549c218ddaf85f3e5062e2926 Mon Sep 17 00:00:00 2001 From: wahaha Date: Sat, 16 Jun 2018 19:50:34 +0800 Subject: [PATCH 2/3] =?UTF-8?q?ch2-01=E6=94=B9=E9=94=99=E8=AF=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ch2-cgo/ch2-01-hello-cgo.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch2-cgo/ch2-01-hello-cgo.md b/ch2-cgo/ch2-01-hello-cgo.md index 4e3fd63..4bef75f 100644 --- a/ch2-cgo/ch2-01-hello-cgo.md +++ b/ch2-cgo/ch2-01-hello-cgo.md @@ -154,7 +154,7 @@ func SayHello(s *C.char) { } ``` -我们通过CGO的`//export SayHello`指令将Go语言实现的函数`SayHello`导出为C语言函数。为了适配CGO导出的C语言函数,我们禁止了在函数的声明语句中的const修饰符。需要主要的是,这里其实有两个版本的`SayHello`函数:一个Go语言环境的;另一个是C语言环境的。cgo生成的C语言版本SayHello函数最终会通过桥接代码调用Go语言版本的SayHello函数。 +我们通过CGO的`//export SayHello`指令将Go语言实现的函数`SayHello`导出为C语言函数。为了适配CGO导出的C语言函数,我们禁止了在函数的声明语句中的const修饰符。需要注意的是,这里其实有两个版本的`SayHello`函数:一个Go语言环境的;另一个是C语言环境的。cgo生成的C语言版本SayHello函数最终会通过桥接代码调用Go语言版本的SayHello函数。 通过面向C语言接口的编程技术,我们不仅仅解放了函数的实现者,同时也简化的函数的使用者。现在我们可以将SayHello当作一个标准库的函数使用(和puts函数的使用方式类似): From d718d89b558d5948d8bc233cb20878bdc2ae9bae Mon Sep 17 00:00:00 2001 From: wahaha Date: Sat, 16 Jun 2018 20:21:06 +0800 Subject: [PATCH 3/3] =?UTF-8?q?ch2-02-=E5=88=A0=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ch2-cgo/ch2-02-basic.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch2-cgo/ch2-02-basic.md b/ch2-cgo/ch2-02-basic.md index 8c7b3f2..0be9e0d 100644 --- a/ch2-cgo/ch2-02-basic.md +++ b/ch2-cgo/ch2-02-basic.md @@ -1,6 +1,6 @@ # 2.2. CGO基础 -要使用CGO特性,需要安装C/C++构建工具链,在macOS和Linux下是要安装和GCC,在windows下是需要安装MinGW工具。同时需要保证环境变量`CGO_ENABLED`被设置为1,这表示CGO是被启用的状态。在本地构建时`CGO_ENABLED`默认是启用的,当交叉构建时CGO默认是禁止的。比如要交叉构建ARM环境运行的Go程序,需要手工设置好C/C++交叉构建的工具链,同时开启`CGO_ENABLED`环境变量。然后通过`import "C"`语句启用CGO特性。 +要使用CGO特性,需要安装C/C++构建工具链,在macOS和Linux下是要安装GCC,在windows下是需要安装MinGW工具。同时需要保证环境变量`CGO_ENABLED`被设置为1,这表示CGO是被启用的状态。在本地构建时`CGO_ENABLED`默认是启用的,当交叉构建时CGO默认是禁止的。比如要交叉构建ARM环境运行的Go程序,需要手工设置好C/C++交叉构建的工具链,同时开启`CGO_ENABLED`环境变量。然后通过`import "C"`语句启用CGO特性。 ## `import "C"`语句