我本来看的中文版,无奈翻译实在是有点看不大懂,只好买了一本英文版。本来以为看英文会比较吃力,没想到的是,英文看起来竟然相当流畅。同时也发现一些翻译上的问题,在此记录一下(持续更新中)。
## 1.英文版P40, 中文版P30
“Named types also make it possible to define new behaviors for values of the type.
These behaviors are expressed as a set of functions associated with type, called the type's methods,
we'll look at methods in detail in Chapter 6 but will give a taste of the mechanism here"
这一段直接全部漏掉了没有翻译。
## 2. 英文版P131,中文版P101
“我们可以忽略掉整个日志”,应该为:“我们可以忽略掉整个错误”
## 3. 英文版P131,中文版P101
"进行错误检查之后,检测到失败的情况往往都在成功之前"
应该为:
“进行错误检查之后,首先进行错误处理,然后再处理正常的逻辑”
## 4. 英文版P131, 中文版P101
“之后跟着实际的函数体一直到最后”
后面一句漏翻译了 “以最大限度的减少缩进”。
## 5. 英文版P131,中文版P101
"偶尔, 一个程序必须针对不同各种类的错误采取不同的措施"
应该为
“然而,程序有时候需要根据发生的不同种类的错误采取不同的处理方式”
## 6. 英文版P132, 中文版P102
"而且它们可以赋给 变量或者传递或者从其他函数返回", 应该为:
"而且,它们可以赋值给变量或者传递给其他函数,或者从其他函数返回"
## 7. 英文版P133, 中文版P103
“这样的代码组织给调用者提供了很多的灵活性”
建议改为:
"这样的代码组织给调用者提供了极大的灵活性"
## 8. 英文版30, 中文版22
"包级别的初始化在main开始之前进行"
应该为:
“包级别的变量初始化在main函数开始执行之前进行”
“局部变量初始化和声明一样在函数执行期间进行”
应该为:
“局部变量的初始化在函数遇到其声明语句的时候进行”
## 9. 英文版31, 中文版23
“短变量声明不需要声明所有在左边的变量”
建议改为:
“短变量声明不需要声明所有在:=左侧的变量”
“如果一些变量在同一个词法块中声明, 那么对于这些变量,短声明的行为等同于赋值”
应改为:
“如果某些变量已经在同一个词法块中声明过了,那么对于这些变量,短声明的行为等同于赋值”
already 没有翻译造成中文意思错误
## 10. 英文版P32, 中文版P24
“变量有时候使用一个地址化的值” , 什么是地址化的值?含义模糊
应为:
“变量有时候被描述为可寻址的值”
## 11. 英文版P35, 中文版P27
“这个规则有一个例外:两个变量的类型不携带任何信息且是零值, 例如struct{}或者[0]int,当前的实现里面,它们有相同的地址”
这一段翻译严重错误,英文原文是:
“There is one exception to this rule: two variables whose type carries no information and is therefore of size zero, such as struct{} or [0]int, may, depending on the implementation, have the same address.”
应该翻译为:
“这个规则有一个例外:两个变量的类型不携带任何信息,因此其size是0,例如struct{}或者[0]int, 可能具有相同的地址,这取决于具体实现。”
## 12. 英文版P35,中文版P27
“每次执行声明语句时创建一个新的实体,变量一直生存到它变得不可访问,这时它占用的存储空间被回收”
应该为:
“每次执行声明语句时创建一个新的实例,变量一直生存到它变得不可访问为止,这时它占用的内存可能会被回收”
两字之差,意思就不一样了。一个变量没有被引用了,那么它的生命周期结束了,但是并不一定会被马上回收,可能会有一些延时,这个要看具体的垃圾回收算法是如何实现的。
## 13. 英文版P36, 中文版P26
“即使包含它的循环已经返回,它的存在还可能延续”
应该为:
“即使包含它的函数已经返回,它的存在还可能延续”
## 14.英文版P36,中文版P26
“编译器可以选择使用堆或栈上的空间来分配” 翻译错误
原文是:
“A compiler may choose to allocate local variables on the heap or on the stack but,...”
也就是说,编译器可以选择在栈上或者堆上分配局部变量,注意是局部变量,并没有提到包级变量,包级变量的生命周期是整个程序的运行期间,空间分配也许跟C/C++一样在静态存储区分配。
## 15.英文版P36,中文版P26
“令人惊奇的是,这个选择不是基于使用var或new关键字来声明变量” 翻译错误
在go中,new是一个预定义的函数,并不是关键字,所以在英文原文中,刻意避免了使用keyword这个说法
英文原文:
“this choice is not determined by whether var or new was used to declare the variable.”
应该翻译为:
“这种选择不是根据是否使用了var或new来确定的”
## 16.英文版P36, 中文版P27
“任何情况下,逃逸的概念使你不需要额外费心来写正确的代码” 翻译错误
原文是:
“In any case, the notion of escaping is not something that you need to worry about in order to write correct code”
中文版完全偏离了英文版表达的意思。正确的翻译应该为:
“在任何情况下,你都不需要担心逃逸的概念影响到你写出正确的代码”
## 17.英文版P36,中文版P27
“赋值语句用来更新变量所指的值”
什么是变量所指的值?根本没有这种说法,中文让人很迷惑
英文原文是:
“the value held by a variable is updated by an assignment statement”
直接翻译成“赋值语句用来更新变量的值” 更好
## 18. 英文版36,中文版P27
“每一个算术和二进制位操作符” 翻译错误
“binary operator”是指二元操作符,没有二进制操作符的说法。
## 19.英文版P37, 中文版P28
“多重赋值也可以使一个普通的赋值序列变得紧凑”
原文是:
“Tuple assignment can also make a sequence of trivial assignments more compact”
trivial意为繁琐的,不知道为什么翻译成普通的,这句话翻译成下面更好
“多重赋值也可以使一系列繁琐的赋值变得更加紧凑”
## 20.英文版P37,中文版P28
“这类表达式(例如一个有多个返回值的函数调用)产生多个值”
翻译有问题,这类是哪一类?前文也没有提到
英文是“certain exxpressions”应该翻译成“某些表达式...”
有疑问加站长微信联系(非本文作者)