1
0
mirror of https://github.com/chai2010/advanced-go-programming-book.git synced 2025-05-24 12:32:21 +00:00

ch2-1-fixed typos

This commit is contained in:
sfw 2018-08-12 12:16:18 +08:00
parent ed2edd71b1
commit a046274383

View File

@ -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执行?*