修改部分描述,添加必要的标点符号,补充代码超链接 (#804)

This commit is contained in:
Jck
2021-10-25 23:34:42 +08:00
committed by GitHub
parent d5578df00a
commit 39dbdb7094
100 changed files with 433 additions and 414 deletions

View File

@@ -14,7 +14,7 @@ Go 中的接口跟 Java/C# 类似:都是必须提供一个指定方法集的
类似于 Python 和 Ruby 这类动态语言中的 `动态类型duck typing`;这意味着对象可以根据提供的方法被处理(例如,作为参数传递给函数),而忽略它们的实际类型:它们能做什么比它们是什么更重要。
这在程序 duck_dance.go 中得以阐明,函数 DuckDance 接受一个 IDuck 接口类型变量。仅当 DuckDance 被实现了 IDuck 接口的类型调用时程序才能编译通过。
这在程序 [duck_dance.go](examples/chapter_11/duck_dance.go) 中得以阐明,函数 DuckDance 接受一个 IDuck 接口类型变量。仅当 DuckDance 被实现了 IDuck 接口的类型调用时程序才能编译通过。
示例 11.16 [duck_dance.go](examples/chapter_11/duck_dance.go)
@@ -119,7 +119,8 @@ Go 的接口提高了代码的分离度,改善了代码的复用性,使得
`提取接口` 是非常有用的设计模式,可以减少需要的类型和方法数量,而且不需要像传统的基于类的面向对象语言那样维护整个的类层次结构。
Go 接口可以让开发者找出自己写的程序中的类型。假设有一些拥有共同行为的对象,并且开发者想要抽象出这些行为,这时就可以创建一个接口来使用。
我们来扩展 11.1 节的示例 11.2 interfaces_poly.go假设我们需要一个新的接口 `TopologicalGenus`,用来给 shape 排序(这里简单地实现为返回 int。我们需要做的是给想要满足接口的类型实现 `Rank()` 方法:
我们来扩展 11.1 节的示例 11.2 [interfaces_poly.go](examples/chapter_11/interfaces_poly.go),假设我们需要一个新的接口 `TopologicalGenus`,用来给 shape 排序(这里简单地实现为返回 int。我们需要做的是给想要满足接口的类型实现 `Rank()` 方法:
示例 11.17 [multi_interfaces_poly.go](examples/chapter_11/multi_interfaces_poly.go)
@@ -229,7 +230,7 @@ func (b Bar) Foo() {}
fmt.Printf(format string, a ...interface{}) (n int, errno error)
```
这个函数通过枚举 `slice` 类型的实参动态确定所有参数的类型并查看每个类型是否实现了 `String()` 方法,如果是就用于产生输出信息。我们可以回到 11.10 节查看这些细节。
这个函数通过枚举 `slice` 类型的实参动态确定所有参数的类型并查看每个类型是否实现了 `String()` 方法,如果是就用于产生输出信息。我们可以回到 11.10 节查看这些细节。
## 11.12.6 接口的继承
@@ -275,7 +276,7 @@ type ReaderWriter struct {
在练习 7.13 中我们定义了一个 map 函数来使用 int 切片 map_function.go
通过空接口和类型断言,现在我们可以写一个可以应用于许多类型的 `泛型` 的 map 函数,为 int 和 string 构建一个把 int 值加倍和将字符串值与其自身连接(译者注:即`"abc"`变成`"abcabc"`)的 map 函数 `mapFunc`
通过空接口和类型断言,现在我们可以写一个可以应用于许多类型的 `泛型` 的 map 函数,为 int 和 string 构建一个把 int 值加倍和将字符串值与其自身连接(译者注:即 `"abc"` 变成 `"abcabc"` )的 map 函数 `mapFunc`
提示:为了可读性可以定义一个 interface{} 的别名比如type obj interface{}