勘误·第一版第一次印刷
1. ch3.4最后一个图有错误
sum函数的ret+24(FP)改为ret+16(FP)
2. ch3.5 控制流 - for例子有错误 #438
171页第一个代码段改为:
func LoopAdd(cnt, v0, step int) int {result, vi := 0, v0for i := 0; i < cnt; i++ {result, vi = result+vi, vi+step}return result}
改动的代码有2行:
result := v0改为result, vi := 0, v0result += step改为result, vi = result+vi, vi+step
171页第二个代码段改为:
func LoopAdd(cnt, v0, step int) int {var vi = v0var result = 0// LOOP_BEGIN:var i = 0LOOP_IF:if i < cnt { goto LOOP_BODY }goto LOOP_ENDLOOP_BODY:i = i+1result = result + vivi = vi + stepgoto LOOP_IFLOOP_END:return result}
改动的部分:
var i = 0改为var vi = v0LOOP_BEGIN:变成注释,其后的代码改为var i = 0- LOOP_BODY中
result = result + step改为result = result + vi - LOOP_BODY中增加一行
vi = vi + step
第三个代码段改为:
#include "textflag.h"// func LoopAdd(cnt, v0, step int) intTEXT ·LoopAdd(SB), NOSPLIT, $0-32MOVQ $0, BX // resultMOVQ cnt+0(FP), AX // cntMOVQ v0+8(FP), DI // vi = v0MOVQ step+16(FP), CX // stepLOOP_BEGIN:MOVQ $0, DX // iLOOP_IF:CMPQ DX, AX // compare i, cntJL LOOP_BODY // if i < cnt: goto LOOP_BODYJMP LOOP_ENDLOOP_BODY:ADDQ DI, BX // result += viADDQ CX, DI // vi += stepADDQ $1, DX // i++JMP LOOP_IFLOOP_END:MOVQ BX, ret+24(FP) // return resultRET
以上三个代码段其实是同一个程序的不同版本,他们的改动都是相同的问题。
3. ch1.1时间有错误
第1页:“到了2010年,Go语言已经逐步趋于稳定。同年9月,Go语言正式发布并开源了代码。”
其中2010改为2009.
