《Go程序设计语言》中文版翻译错误

VincentZheng · · 1018 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

我本来看的中文版,无奈翻译实在是有点看不大懂,只好买了一本英文版。本来以为看英文会比较吃力,没想到的是,英文看起来竟然相当流畅。同时也发现一些翻译上的问题,在此记录一下(持续更新中)。 ## 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”应该翻译成“某些表达式...”

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1018 次点击  
加入收藏 微博
1 回复  |  直到 2019-07-15 09:11:24
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传