Skip to content

Commit 46594e7

Browse files
committed
勘误信息
1 parent 10caf84 commit 46594e7

File tree

8 files changed

+139
-2
lines changed

8 files changed

+139
-2
lines changed

ch1-basic/ch1-01-genesis.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# 1.1 Go语言创世纪
22

3-
Go语言最初由Google公司的Robert Griesemer、Ken Thompson和Rob Pike三个大牛于2007年开始设计发明,设计新语言的最初的洪荒之力来自于对超级复杂的C++11特性的吹捧报告的鄙视,最终的目标是设计网络和多核时代的C语言。到2008年中期,语言的大部分特性设计已经完成,并开始着手实现编译器和运行时,大约在这一年Russ Cox作为主力开发者加入。到了2010年,Go语言已经逐步趋于稳定。同年9月,Go语言正式发布并开源了代码。
3+
Go语言最初由Google公司的Robert Griesemer、Ken Thompson和Rob Pike三个大牛于2007年开始设计发明,设计新语言的最初的洪荒之力来自于对超级复杂的C++11特性的吹捧报告的鄙视,最终的目标是设计网络和多核时代的C语言。到2008年中期,语言的大部分特性设计已经完成,并开始着手实现编译器和运行时,大约在这一年Russ Cox作为主力开发者加入。到了2009年,Go语言已经逐步趋于稳定。同年9月,Go语言正式发布并开源了代码。
44

55
Go语言很多时候被描述为“类C语言”,或者是“21世纪的C语言”。从各种角度看,Go语言确实是从C语言继承了相似的表达式语法、控制流结构、基础数据类型、调用参数传值、指针等诸多编程思想,还有彻底继承和发扬了C语言简单直接的暴力编程哲学等。图1-1是《Go语言圣经》中给出的Go语言的基因图谱,我们可以从中看到有哪些编程语言对Go语言产生了影响。
66

errata/README.md

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
# 勘误·第一版第一次印刷
2+
3+
## 1. ch3.4最后一个图有错误
4+
5+
sum函数的`ret+24(FP)`改为`ret+16(FP)`
6+
7+
## 2. ch3.5 控制流 - for例子有错误 #438
8+
9+
171页第一个代码段改为:
10+
11+
```go
12+
func LoopAdd(cnt, v0, step int) int {
13+
result, vi := 0, v0
14+
for i := 0; i < cnt; i++ {
15+
result, vi = result+vi, vi+step
16+
}
17+
return result
18+
}
19+
```
20+
21+
改动的代码有2行:
22+
1. `result := v0`改为`result, vi := 0, v0`
23+
2. `result += step`改为`result, vi = result+vi, vi+step`
24+
25+
171页第二个代码段改为:
26+
27+
```go
28+
func LoopAdd(cnt, v0, step int) int {
29+
var vi = v0
30+
var result = 0
31+
32+
// LOOP_BEGIN:
33+
var i = 0
34+
35+
LOOP_IF:
36+
if i < cnt { goto LOOP_BODY }
37+
goto LOOP_END
38+
39+
LOOP_BODY:
40+
i = i+1
41+
result = result + vi
42+
vi = vi + step
43+
goto LOOP_IF
44+
45+
LOOP_END:
46+
47+
return result
48+
}
49+
```
50+
51+
改动的部分:
52+
1. `var i = 0`改为`var vi = v0`
53+
2. `LOOP_BEGIN:`变成注释,其后的代码改为`var i = 0`
54+
3. LOOP_BODY中`result = result + step`改为`result = result + vi`
55+
4. LOOP_BODY中增加一行`vi = vi + step`
56+
57+
第三个代码段改为:
58+
59+
```go
60+
#include "textflag.h"
61+
62+
// func LoopAdd(cnt, v0, step int) int
63+
TEXT ·LoopAdd(SB), NOSPLIT, $0-32
64+
MOVQ $0, BX // result
65+
MOVQ cnt+0(FP), AX // cnt
66+
MOVQ v0+8(FP), DI // vi = v0
67+
MOVQ step+16(FP), CX // step
68+
69+
LOOP_BEGIN:
70+
MOVQ $0, DX // i
71+
72+
LOOP_IF:
73+
CMPQ DX, AX // compare i, cnt
74+
JL LOOP_BODY // if i < cnt: goto LOOP_BODY
75+
JMP LOOP_END
76+
77+
LOOP_BODY:
78+
ADDQ DI, BX // result += vi
79+
ADDQ CX, DI // vi += step
80+
ADDQ $1, DX // i++
81+
JMP LOOP_IF
82+
83+
LOOP_END:
84+
85+
MOVQ BX, ret+24(FP) // return result
86+
RET
87+
```
88+
89+
 以上三个代码段其实是同一个程序的不同版本,他们的改动都是相同的问题。
90+
91+
## ch1.1时间有错误
92+
93+
第1页:“到了2010年,Go语言已经逐步趋于稳定。同年9月,Go语言正式发布并开源了代码。”
94+
95+
其中2010改为2009.
96+
97+

errata/a.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
)
6+
7+
func main() {
8+
fmt.Println("Hello, playground", LoopAdd(100, 1, 1))
9+
}
10+
11+
func LoopAdd(cnt, v0, step int) int

errata/a_amd64.s

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#include "textflag.h"
2+
3+
// func LoopAdd(cnt, v0, step int) int
4+
TEXT ·LoopAdd(SB), NOSPLIT, $0-32
5+
MOVQ $0, BX // result
6+
MOVQ cnt+0(FP), AX // cnt
7+
MOVQ v0+8(FP), DI // vi = v0
8+
MOVQ step+16(FP), CX // step
9+
10+
LOOP_BEGIN:
11+
MOVQ $0, DX // i
12+
13+
LOOP_IF:
14+
CMPQ DX, AX // compare i, cnt
15+
JL LOOP_BODY // if i < cnt: goto LOOP_BODY
16+
JMP LOOP_END
17+
18+
LOOP_BODY:
19+
ADDQ DI, BX // result += vi
20+
ADDQ CX, DI // vi += step
21+
ADDQ $1, DX // i++
22+
JMP LOOP_IF
23+
24+
LOOP_END:
25+
26+
MOVQ BX, ret+24(FP) // return result
27+
RET
36 KB
Loading

go.mod

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,5 @@
55
module chai2010.cn/gobook
66

77
require github.com/chai2010/advanced-go-programming-book v0.0.0-20181214135029-bcf560505d53 // indirect
8+
9+
go 1.13
19 Bytes
Loading

images/ch3-12-func-call-frame-01.ditaa.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
| | | cYEL |c-8(SP) sum frame
2323
| | +----------+ +----------+
2424
| call sum | | | : |
25-
| | | sum.ret |<----=---|ret+24(FP)|
25+
| | | sum.ret |<----=---|ret+16(FP)|
2626
| | +16(SP)| cPNK | return | |ret+16(FP)
2727
| | +----------+ +----------+
2828
| | | | : |

0 commit comments

Comments
 (0)