翻译更正+原书勘误+译者注 (#598)

* 翻译更正+译者注

原文:concatenates the string with itself.
为了便于理解增加了译者注

* 原书此处也是11.9,但实际上指的是练习11.11

原书此处也是11.9,但实际上指的是练习11.11

* 此处英文版原书有误,应该是练习10.16和10.17

* 原书此处有误,因为方法无法同时使用命名过的返回值和未命名的返回值

会报错:Method specification has both named and unnamed return parameters '(x interface{}, error)'

* 补漏+易读性提升

A function which has a (one or more) parameter of an interface type can be called with a variable(此处译文中漏掉) whose type implements that interface. 
其**实参**可以是任何实现了该接口的类型的变量
This commit is contained in:
Respawnz
2019-04-08 22:32:18 +08:00
committed by 无闻
parent d6af03c9d1
commit 7aae332065

View File

@@ -10,7 +10,7 @@ Go 中的接口跟 Java/C# 类似:都是必须提供一个指定方法集的
和其它语言相比Go 是唯一结合了接口值,静态类型检查(是否该类型实现了某个接口),运行时动态转换的语言,并且不需要显式地声明类型是否满足某个接口。该特性允许我们在不改变已有的代码的情况下定义和使用新接口。 和其它语言相比Go 是唯一结合了接口值,静态类型检查(是否该类型实现了某个接口),运行时动态转换的语言,并且不需要显式地声明类型是否满足某个接口。该特性允许我们在不改变已有的代码的情况下定义和使用新接口。
接收一个(或多个)接口类型作为参数的函数,其实参可以是任何实现了该接口的类型。 `实现了某个接口的类型可以被传给任何以此接口为参数的函数` 接收一个(或多个)接口类型作为参数的函数,其**实参**可以是任何实现了该接口的类型的变量`实现了某个接口的类型可以被传给任何以此接口为参数的函数`
类似于 Python 和 Ruby 这类动态语言中的 `动态类型duck typing`;这意味着对象可以根据提供的方法被处理(例如,作为参数传递给函数),而忽略它们的实际类型:它们能做什么比它们是什么更重要。 类似于 Python 和 Ruby 这类动态语言中的 `动态类型duck typing`;这意味着对象可以根据提供的方法被处理(例如,作为参数传递给函数),而忽略它们的实际类型:它们能做什么比它们是什么更重要。
@@ -275,17 +275,17 @@ type ReaderWriter struct {
在练习 7.13 中我们定义了一个 map 函数来使用 int 切片 map_function.go 在练习 7.13 中我们定义了一个 map 函数来使用 int 切片 map_function.go
通过空接口和类型断言,现在我们可以写一个可以应用于许多类型的 `泛型` 的 map 函数,为 int 和 string 构建一个把 int 值加倍和连接字符串值的 map 函数 `mapFunc` 通过空接口和类型断言,现在我们可以写一个可以应用于许多类型的 `泛型` 的 map 函数,为 int 和 string 构建一个把 int 值加倍和字符串值与其自身连接(译者注:即`"abc"`变成`"abcabc"`的 map 函数 `mapFunc`
提示:为了可读性可以定义一个 interface{} 的别名比如type obj interface{} 提示:为了可读性可以定义一个 interface{} 的别名比如type obj interface{}
**练习 11.12**[map_function_interface_var.go](exercises/chapter_11/map_function_interface_var.go) **练习 11.12**[map_function_interface_var.go](exercises/chapter_11/map_function_interface_var.go)
稍微改变练习 11.9,允许 `mapFunc` 接收不定数量的 items。 稍微改变练习 11.11,允许 `mapFunc` 接收不定数量的 items。
**练习 11.13**[main_stack.go](exercises/chapter_11/main_stack.go)—[stack/stack_general.go](exercises/chapter_11/stack/stack_general.go) **练习 11.13**[main_stack.go](exercises/chapter_11/main_stack.go)—[stack/stack_general.go](exercises/chapter_11/stack/stack_general.go)
在练习 10.10 和 10.11 中我们开发了一些栈结构类型。但是它们被限制为某种固定的内建类型。现在用一个元素类型是 interface{}(空接口)的切片开发一个通用的栈类型。 在练习 10.16 和 10.17 中我们开发了一些栈结构类型。但是它们被限制为某种固定的内建类型。现在用一个元素类型是 interface{}(空接口)的切片开发一个通用的栈类型。
实现下面的栈方法: 实现下面的栈方法:
@@ -293,7 +293,7 @@ type ReaderWriter struct {
Len() int Len() int
IsEmpty() bool IsEmpty() bool
Push(x interface{}) Push(x interface{})
Pop() (x interface{}, error) Pop() (interface{}, error)
``` ```
`Pop()` 改变栈并返回最顶部的元素;`Top()` 只返回最顶部元素。 `Pop()` 改变栈并返回最顶部的元素;`Top()` 只返回最顶部元素。