勘误信息
This commit is contained in:
parent
10caf84852
commit
46594e79f5
|
@ -1,6 +1,6 @@
|
|||
# 1.1 Go语言创世纪
|
||||
|
||||
Go语言最初由Google公司的Robert Griesemer、Ken Thompson和Rob Pike三个大牛于2007年开始设计发明,设计新语言的最初的洪荒之力来自于对超级复杂的C++11特性的吹捧报告的鄙视,最终的目标是设计网络和多核时代的C语言。到2008年中期,语言的大部分特性设计已经完成,并开始着手实现编译器和运行时,大约在这一年Russ Cox作为主力开发者加入。到了2010年,Go语言已经逐步趋于稳定。同年9月,Go语言正式发布并开源了代码。
|
||||
Go语言最初由Google公司的Robert Griesemer、Ken Thompson和Rob Pike三个大牛于2007年开始设计发明,设计新语言的最初的洪荒之力来自于对超级复杂的C++11特性的吹捧报告的鄙视,最终的目标是设计网络和多核时代的C语言。到2008年中期,语言的大部分特性设计已经完成,并开始着手实现编译器和运行时,大约在这一年Russ Cox作为主力开发者加入。到了2009年,Go语言已经逐步趋于稳定。同年9月,Go语言正式发布并开源了代码。
|
||||
|
||||
Go语言很多时候被描述为“类C语言”,或者是“21世纪的C语言”。从各种角度看,Go语言确实是从C语言继承了相似的表达式语法、控制流结构、基础数据类型、调用参数传值、指针等诸多编程思想,还有彻底继承和发扬了C语言简单直接的暴力编程哲学等。图1-1是《Go语言圣经》中给出的Go语言的基因图谱,我们可以从中看到有哪些编程语言对Go语言产生了影响。
|
||||
|
||||
|
|
|
@ -0,0 +1,97 @@
|
|||
# 勘误·第一版第一次印刷
|
||||
|
||||
## 1. ch3.4最后一个图有错误
|
||||
|
||||
sum函数的`ret+24(FP)`改为`ret+16(FP)`
|
||||
|
||||
## 2. ch3.5 控制流 - for例子有错误 #438
|
||||
|
||||
171页第一个代码段改为:
|
||||
|
||||
```go
|
||||
func LoopAdd(cnt, v0, step int) int {
|
||||
result, vi := 0, v0
|
||||
for i := 0; i < cnt; i++ {
|
||||
result, vi = result+vi, vi+step
|
||||
}
|
||||
return result
|
||||
}
|
||||
```
|
||||
|
||||
改动的代码有2行:
|
||||
1. `result := v0`改为`result, vi := 0, v0`
|
||||
2. `result += step`改为`result, vi = result+vi, vi+step`
|
||||
|
||||
171页第二个代码段改为:
|
||||
|
||||
```go
|
||||
func LoopAdd(cnt, v0, step int) int {
|
||||
var vi = v0
|
||||
var result = 0
|
||||
|
||||
// LOOP_BEGIN:
|
||||
var i = 0
|
||||
|
||||
LOOP_IF:
|
||||
if i < cnt { goto LOOP_BODY }
|
||||
goto LOOP_END
|
||||
|
||||
LOOP_BODY:
|
||||
i = i+1
|
||||
result = result + vi
|
||||
vi = vi + step
|
||||
goto LOOP_IF
|
||||
|
||||
LOOP_END:
|
||||
|
||||
return result
|
||||
}
|
||||
```
|
||||
|
||||
改动的部分:
|
||||
1. `var i = 0`改为`var vi = v0`
|
||||
2. `LOOP_BEGIN:`变成注释,其后的代码改为`var i = 0`
|
||||
3. LOOP_BODY中`result = result + step`改为`result = result + vi`
|
||||
4. LOOP_BODY中增加一行`vi = vi + step`
|
||||
|
||||
第三个代码段改为:
|
||||
|
||||
```go
|
||||
#include "textflag.h"
|
||||
|
||||
// func LoopAdd(cnt, v0, step int) int
|
||||
TEXT ·LoopAdd(SB), NOSPLIT, $0-32
|
||||
MOVQ $0, BX // result
|
||||
MOVQ cnt+0(FP), AX // cnt
|
||||
MOVQ v0+8(FP), DI // vi = v0
|
||||
MOVQ step+16(FP), CX // step
|
||||
|
||||
LOOP_BEGIN:
|
||||
MOVQ $0, DX // i
|
||||
|
||||
LOOP_IF:
|
||||
CMPQ DX, AX // compare i, cnt
|
||||
JL LOOP_BODY // if i < cnt: goto LOOP_BODY
|
||||
JMP LOOP_END
|
||||
|
||||
LOOP_BODY:
|
||||
ADDQ DI, BX // result += vi
|
||||
ADDQ CX, DI // vi += step
|
||||
ADDQ $1, DX // i++
|
||||
JMP LOOP_IF
|
||||
|
||||
LOOP_END:
|
||||
|
||||
MOVQ BX, ret+24(FP) // return result
|
||||
RET
|
||||
```
|
||||
|
||||
以上三个代码段其实是同一个程序的不同版本,他们的改动都是相同的问题。
|
||||
|
||||
## ch1.1时间有错误
|
||||
|
||||
第1页:“到了2010年,Go语言已经逐步趋于稳定。同年9月,Go语言正式发布并开源了代码。”
|
||||
|
||||
其中2010改为2009.
|
||||
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
func main() {
|
||||
fmt.Println("Hello, playground", LoopAdd(100, 1, 1))
|
||||
}
|
||||
|
||||
func LoopAdd(cnt, v0, step int) int
|
|
@ -0,0 +1,27 @@
|
|||
#include "textflag.h"
|
||||
|
||||
// func LoopAdd(cnt, v0, step int) int
|
||||
TEXT ·LoopAdd(SB), NOSPLIT, $0-32
|
||||
MOVQ $0, BX // result
|
||||
MOVQ cnt+0(FP), AX // cnt
|
||||
MOVQ v0+8(FP), DI // vi = v0
|
||||
MOVQ step+16(FP), CX // step
|
||||
|
||||
LOOP_BEGIN:
|
||||
MOVQ $0, DX // i
|
||||
|
||||
LOOP_IF:
|
||||
CMPQ DX, AX // compare i, cnt
|
||||
JL LOOP_BODY // if i < cnt: goto LOOP_BODY
|
||||
JMP LOOP_END
|
||||
|
||||
LOOP_BODY:
|
||||
ADDQ DI, BX // result += vi
|
||||
ADDQ CX, DI // vi += step
|
||||
ADDQ $1, DX // i++
|
||||
JMP LOOP_IF
|
||||
|
||||
LOOP_END:
|
||||
|
||||
MOVQ BX, ret+24(FP) // return result
|
||||
RET
|
Binary file not shown.
After Width: | Height: | Size: 36 KiB |
2
go.mod
2
go.mod
|
@ -5,3 +5,5 @@
|
|||
module chai2010.cn/gobook
|
||||
|
||||
require github.com/chai2010/advanced-go-programming-book v0.0.0-20181214135029-bcf560505d53 // indirect
|
||||
|
||||
go 1.13
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 36 KiB |
|
@ -22,7 +22,7 @@
|
|||
| | | cYEL |c-8(SP) sum frame
|
||||
| | +----------+ +----------+
|
||||
| call sum | | | : |
|
||||
| | | sum.ret |<----=---|ret+24(FP)|
|
||||
| | | sum.ret |<----=---|ret+16(FP)|
|
||||
| | +16(SP)| cPNK | return | |ret+16(FP)
|
||||
| | +----------+ +----------+
|
||||
| | | | : |
|
||||
|
|
Loading…
Reference in New Issue