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

修复main拼写错误

This commit is contained in:
ezioruan 2018-01-07 21:38:36 +08:00
parent 6f4d068a20
commit c503494e8d

View File

@ -1,7 +1,7 @@
# 1.2. Hello, World 的革命
在创世纪章节中我们简单介绍了Go语言的演化基因族谱对其中来自于贝尔实验室的特有并发编程基因做了重点介绍最后引出了Go语言版的“Hello, World”程序。其实“Hello, World”程序是展示各种语言特性的最好的例子是通向该语言的一个窗口。这一节我们将沿着各个编程语言演化的时间轴简单回顾下“Hello, World”程序是如何逐步演化到目前的Go语言形式、最终完成它的革命使命的。
在创世纪章节中我们简单介绍了Go语言的演化基因族谱对其中来自于贝尔实验室的特有并发编程基因做了重点介绍最后引出了Go语言版的“Hello, World”程序。其实“Hello, World”程序是展示各种语言特性的最好的例子是通向该语言的一个窗口。这一节我们将沿着各个编程语言演化的时间轴简单回顾下“Hello, World”程序是如何逐步演化到目前的Go语言形式、最终完成它的革命使命的。
![](../images/ch1-01-go-history.png)
## B语言 - Ken Thompson, 1972
@ -384,7 +384,7 @@ TEXT ·main(SB), $16-0
RET
```
代码中`#include "textflag.h"`语句包含运行时库定义的头文件, 里面含有`NOPTR`/`NO_LOCAL_POINTERS`等基本的宏的定义。`DATA`汇编指令用于定义数据每个数据的宽度必须是1/2/4/8然后`GLOBL`汇编命令在当前文件内导出`text`变量符号。`TEXT ·main(SB), $16-0`用于定义`main`函数,其中`$16-0`表示`mian`函数的帧大小是16个字节对应string头的大小用于给`runtime·printstring`函数传递参数),`0`表示`main`函数没有参数和返回值。`main`函数内部通过调用运行时内部的`runtime·printstring(SB)`函数来打印字符串。
代码中`#include "textflag.h"`语句包含运行时库定义的头文件, 里面含有`NOPTR`/`NO_LOCAL_POINTERS`等基本的宏的定义。`DATA`汇编指令用于定义数据每个数据的宽度必须是1/2/4/8然后`GLOBL`汇编命令在当前文件内导出`text`变量符号。`TEXT ·main(SB), $16-0`用于定义`main`函数,其中`$16-0`表示`main`函数的帧大小是16个字节对应string头的大小用于给`runtime·printstring`函数传递参数),`0`表示`main`函数没有参数和返回值。`main`函数内部通过调用运行时内部的`runtime·printstring(SB)`函数来打印字符串。
Go汇编语言虽然针对每种CPU架构主要有386/AMD64/ARMARM64等有对应的指令和寄存器但是汇编语言的基本语法和函数调用规范是一致的不同操作系统之间用法是一致的。在Go语言标准库中`runtime`运行时库、`math`数学库和`crypto`密码相关的函数很多是采用汇编语言实现的。其中`runtime`运行时库中采用部分汇编语言并不完全是为了性能而是运行时的某些特性功能比如goroutine上下文的切换等无法用纯Go实现因此需要汇编代码实现某些辅助功能。对于普通用户而言Go汇编语言的最大价值在于性能的优化对于性能比较关键的地方可以尝试用Go汇编语言实现终极优化。