From a0462743834040460685c97f96db2faa0c798948 Mon Sep 17 00:00:00 2001 From: sfw Date: Sun, 12 Aug 2018 12:16:18 +0800 Subject: [PATCH] ch2-1-fixed typos --- ch2-cgo/ch2-01-hello-cgo.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ch2-cgo/ch2-01-hello-cgo.md b/ch2-cgo/ch2-01-hello-cgo.md index d6e5ac1..31e04a6 100644 --- a/ch2-cgo/ch2-01-hello-cgo.md +++ b/ch2-cgo/ch2-01-hello-cgo.md @@ -1,10 +1,10 @@ # 2.1 快速入门 -本节我们将通过由浅入深的一系列小例子来快速掌握CGO的基本用法。 +本节我们将通过一系列由浅入深的小例子来快速掌握CGO的基本用法。 ## 2.1.1 最简CGO程序 -真实的CGO程序一般都比较复杂。不过我们可以反其道而行之,一个最简的CGO程序该是什么样的呢?要构造一个最简CGO程序,首先要去掉一些复杂的CGO特性,同时要展示CGO程序和纯Go程序的差别来。下面是我们构建的最简CGO程序: +真实的CGO程序一般都比较复杂。不过我们可以反其道而行之,一个最简的CGO程序该是什么样的呢?要构造一个最简CGO程序,首先要忽视一些复杂的CGO特性,同时要展示CGO程序和纯Go程序的差别来。下面是我们构建的最简CGO程序: ```go import "C" @@ -110,7 +110,7 @@ void SayHello(const char* s) { } ``` -在hello.c文件的开头,实现者通过`#include "hello.h"`语句包含SayHello函数声明的签名,这样可以保证函数的实现满足模块对外公开的接口。 +在hello.c文件的开头,实现者通过`#include "hello.h"`语句包含SayHello函数的声明,这样可以保证函数的实现满足模块对外公开的接口。 接口文件hello.h是hello模块的实现者和使用者共同的约定,但是该约定并没有要求必须使用C语言来实现SayHello函数。我们也可以用C++语言来重新实现这个C语言函数: @@ -128,7 +128,7 @@ void SayHello(const char* s) { } ``` -在C++版本的SayHello函数实现中,我们通过C++特有的`std::cout`输出流输出字符串。不过为了保证C++语言实现的SayHello函数满足C语言头文件hello.h定义的函数规范,我们需要通过`extern "C"`语句指示该函数的链接符号遵循C语言的名字修身规则。 +在C++版本的SayHello函数实现中,我们通过C++特有的`std::cout`输出流输出字符串。不过为了保证C++语言实现的SayHello函数满足C语言头文件hello.h定义的函数规范,我们需要通过`extern "C"`语句指示该函数的链接符号遵循C语言的规则。 在采用面向C语言API接口编程之后,我们彻底解放了模块实现者的语言枷锁:实现者可以用任何编程语言实现模块,只要最终满足公开的API约定即可。我们可以用C语言实现SayHello函数,也可以使用更复杂的C++语言来实现SayHello函数,当然我们也可以用汇编语言甚至Go语言来重新实现SayHello函数。 @@ -142,7 +142,7 @@ void SayHello(const char* s) { void SayHello(/*const*/ char* s); ``` -现在我们创建一个hello.go文件来用Go语言重新实现C语言接口的SayHello函数: +现在我们创建一个hello.go文件,用Go语言重新实现C语言接口的SayHello函数: ```go // hello.go @@ -223,4 +223,4 @@ func SayHello(s string) { 虽然看起来全部是Go语言代码,但是执行的时候是先从Go语言的`main`函数,到CGO自动生成的C语言版本`SayHello`桥接函数,最后又回到了Go语言环境的`SayHello`函数。这个代码包含了CGO编程的精华,读者需要深入理解。 -*思考题: main函数和SayHello函数是否在同一个Goroutine只执行?* +*思考题: main函数和SayHello函数是否在同一个Goroutine里执行?*