mirror of
https://github.com/unknwon/the-way-to-go_ZH_CN.git
synced 2025-08-11 22:06:51 +08:00
11.5-11.7
This commit is contained in:
@@ -9,7 +9,7 @@
|
||||
|
||||
## 翻译进度
|
||||
|
||||
11.4 [类型判断:type-switch](eBook/11.4.md)
|
||||
11.7 [第一个例子:使用Sorter接口排序](eBook/11.7.md)
|
||||
|
||||
## 支持本书
|
||||
|
||||
|
@@ -28,4 +28,4 @@ Golang 编程:245386165
|
||||
|
||||
|更新日期 |更新内容
|
||||
|----------|------------------
|
||||
|2015-09-11|11.4 类型判断:type-switch
|
||||
|2015-09-12|11.7 第一个例子:使用Sorter接口排序
|
3
TOC.md
3
TOC.md
@@ -93,3 +93,6 @@
|
||||
- 11.2 [接口嵌套接口](eBook/11.2.md)
|
||||
- 11.3 [类型断言:如何检测和转换接口变量的类型](eBook/11.3.md)
|
||||
- 11.4 [类型判断:type-switch](eBook/11.4.md)
|
||||
- 11.5 [测试一个值是否实现了某个接口](eBook/11.5.md)
|
||||
- 11.6 [使用方法集与接口](eBook/11.6.md)
|
||||
- 11.7 [第一个例子:使用Sorter接口排序](eBook/11.7.md)
|
@@ -1,6 +1,6 @@
|
||||
# 11.6 使用方法集与接口
|
||||
|
||||
在 10.6.3 及例子 methodset1.go 中我们看到,作用于变量上的方法实际上是不区分变量到底是指针还是值的。当碰到接口类型值时,这会变得有点复杂,原因是接口变量中存储的具体值是不可寻址的,幸运的是,如果使用不当编译器会给出错误。考虑下面的程序:
|
||||
在第 10.6.3 节及例子 methodset1.go 中我们看到,作用于变量上的方法实际上是不区分变量到底是指针还是值的。当碰到接口类型值时,这会变得有点复杂,原因是接口变量中存储的具体值是不可寻址的,幸运的是,如果使用不当编译器会给出错误。考虑下面的程序:
|
||||
|
||||
示例 11.5 methodset2.go:
|
||||
|
||||
@@ -77,10 +77,9 @@ func main() {
|
||||
|
||||
将一个值赋值给一个接口赋值时,编译器会确保所有可能的接口方法都可以在此值上被调用,因此不正确的赋值在编译期就会失败。
|
||||
|
||||
|
||||
**译注**
|
||||
|
||||
Go语言规范定义了接口方法集的调用规则:
|
||||
Go 语言规范定义了接口方法集的调用规则:
|
||||
|
||||
- 类型 *T 的可调用方法集包含接受者为 *T 或 T 的所有方法集
|
||||
- 类型 T 的可调用方法集包含接受者为 T 的所有方法
|
||||
@@ -90,4 +89,4 @@ Go语言规范定义了接口方法集的调用规则:
|
||||
|
||||
- [目录](directory.md)
|
||||
- 上一节:[测试一个值是否实现了某个接口](11.5.md)
|
||||
- 下一节:[第一个例子:使用Sorter接口排序](11.7.md)
|
||||
- 下一节:[第一个例子:使用 Sorter 接口排序](11.7.md)
|
@@ -1,8 +1,7 @@
|
||||
# 11.7 第一个例子:使用Sorter接口排序
|
||||
# 11.7 第一个例子:使用 Sorter 接口排序
|
||||
|
||||
一个很好的例子是来自标准库的 `sort` 包,要对一组数字或字符串排序,只需要实现三个方法:反映元素个数的 `Len()`方法、比较第 `i` 和 `j` 个元素的 `Less(i, j)` 方法以及交换第 `i` 和 `j` 个元素的 `Swap(i, j)` 方法。
|
||||
|
||||
|
||||
排序函数的算法只会使用到这三个方法(可以使用任何排序算法来实现,此处我们使用冒泡排序):
|
||||
|
||||
```go
|
||||
@@ -17,7 +16,7 @@ func Sort(data Sorter) {
|
||||
}
|
||||
```
|
||||
|
||||
`Sort` 函数接收一个接口类型参数: `Sorter` ,它声明了这些方法:
|
||||
`Sort` 函数接收一个接口类型参数:`Sorter` ,它声明了这些方法:
|
||||
|
||||
```go
|
||||
type Sorter interface {
|
||||
@@ -27,7 +26,7 @@ type Sorter interface {
|
||||
}
|
||||
```
|
||||
|
||||
参数中的 `int` 不是说要排序的对象一定要是一组 `int`,`i` 和 `j` 表示元素的整型索引,长度也是整型的。
|
||||
参数中的 `int` 不是说要排序的对象一定要是一组 `int`、`i` 和 `j` 表示元素的整型索引,长度也是整型的。
|
||||
|
||||
现在如果我们想对一个 `int` 数组进行排序,所有必须做的事情就是:为数组定一个类型并在它上面实现 `Sorter` 接口的方法:
|
||||
|
||||
|
Reference in New Issue
Block a user