diff --git a/eBook/11.1.md b/eBook/11.1.md index 35805a8..16eb5be 100644 --- a/eBook/11.1.md +++ b/eBook/11.1.md @@ -236,13 +236,13 @@ type Reader interface { 有的时候,也会以一种稍微不同的方式来使用接口这个词:从某个类型的角度来看,它的接口指的是:它的所有导出方法,只不过没有显式地为这些导出方法额外定一个接口而已。 -练习 11.1:simple_interface.go +**练习 11.1** simple_interface.go: 定义一个接口 `Simpler`,它有一个 `Get()` 方法和一个 `Set()`,`Get()`返回一个整型值,`Set()` 有一个整型参数。创建一个结构体类型 `Simple` 实现这个接口。 接着定一个函数,它有一个 `Simpler` 类型的参数,调用参数的 `Get()` 和 `Set()` 方法。在 `main` 函数里调用这个函数,看看它是否可以正确运行。 -练习 11.2:interfaces_poly2.go +**练习 11.2**interfaces_poly2.go: a) 扩展 interfaces_poly.go 中的例子,添加一个 `Circle` 类型 diff --git a/eBook/11.4.md b/eBook/11.4.md index 2ef390f..6bbe115 100644 --- a/eBook/11.4.md +++ b/eBook/11.4.md @@ -67,9 +67,9 @@ func classifier(items ...interface{}) { 在 示例12.17(xml.go) 中解析 XML 文档是,我们就会用到 `type-switch` 。 -练习 11.4:simple_interface2.go +**练习 11.4** simple_interface2.go: -接着 练习 11.1 中的内容,创建第二个类型 `RSimple`,它也实现了接口 `Simpler`,写一个函数 `fi`,它可以区分 `Simple` 和 `RSimple` 类型的变量。 +接着 练习11.1 中的内容,创建第二个类型 `RSimple`,它也实现了接口 `Simpler`,写一个函数 `fi`,它可以区分 `Simple` 和 `RSimple` 类型的变量。 ## 链接 diff --git a/eBook/11.7.md b/eBook/11.7.md index 90aca17..873aec9 100644 --- a/eBook/11.7.md +++ b/eBook/11.7.md @@ -195,17 +195,17 @@ type Interface interface { 这个接口总结了需要用于排序的抽象方法,函数 `Sort(data Interface)` 用来对此类对象进行排序,可以用它们来实现对其他数据(非基本类型)进行排序。在上面的例子中,我们也是这么做的,不仅可以对 `int` 和 `string` 序列进行排序,也可以对用户自定义类型 `dayArray` 进行排序。 -练习 11.5:interfaces_ext.go +**练习 11.5** interfaces_ext.go: a). 继续扩展程序,定义类型 `Triangle`,让它实现 `AreaInterface` 接口。通过计算一个特定三角形的面积来进行测试(三角形面积=0.5 * (底 * 高)) b). 定义一个新接口 `PeriInterface`,它有一个 `Perimeter` 接口。让 `Square` 实现这个接口,并通过一个 `Square` 示例来测试它。 -练习 11.6:point_interfaces.go +**练习 11.6** point_interfaces.go: 继续 10.3 中的练习 point_methods.go,定义接口 `Magnitude`,它有一个方法 `Abs()`。让 `Point`、`Point3` 及`Polar` 实现此接口。通过接口类型变量使用方法做point.go中同样的事情。 -练习 11.7:float_sort.go / float_sortmain.go +**练习 11.7** float_sort.go / float_sortmain.go: 类似11.7和示例11.3/4,定义一个包 `float64`,并在包里定义类型 `Float64Array`,然后让它实现 `Sorter` 接口用来对 `float64` 数组进行排序。 @@ -217,7 +217,7 @@ b). 在主程序中新建一个此类型的变量,然后对它排序并进行测试。 -练习 11.8:sort.go / sort_persons.go +**练习 11.8** sort.go/sort_persons.go: 定义一个结构体 `Person`,它有两个字段:`firstName` 和 `lastName`,为 `[]Person` 定义类型 `Persons` 。让 `Persons` 实现 `Sorter` 接口并进行测试。 diff --git a/eBook/11.9.md b/eBook/11.9.md index ebf2fd4..07e0f50 100644 --- a/eBook/11.9.md +++ b/eBook/11.9.md @@ -105,9 +105,9 @@ func main() { any hello is a special String! -练习 11.9 simple_interface3.go: +**练习 11.9** simple_interface3.go: -继续练习11.2,在它中添加一个 `gI` 函数,它不再接受 `Simpler` 类型的参数,而是接受一个空接口参数。然后通过类型断言判断参数是否是 `Simpler` 类型。最后在 `main` 使用 `gI` 取代 `fI` 函数并调用它。确保你的代码足够安全。 +继续 练习11.2,在它中添加一个 `gI` 函数,它不再接受 `Simpler` 类型的参数,而是接受一个空接口参数。然后通过类型断言判断参数是否是 `Simpler` 类型。最后在 `main` 使用 `gI` 取代 `fI` 函数并调用它。确保你的代码足够安全。 ## 11.9.2 构建通用类型或包含不同类型变量的数组 @@ -141,7 +141,7 @@ func (p *Vector) Set(i int, e Element) { `Vector` 中存储的所有元素都是 `Element` 类型,要得到它们的原始类型(unboxing:拆箱)需要用到类型断言。TODO:The compiler rejects assertions guaranteed to fail,类型断言总是在运行时才执行,因此它会产生运行时错误。 -练习 11.10 min_interface.go / minmain.go: +**练习 11.10** min_interface.go / minmain.go: 仿照11.7中开发的 `Sorter` 接口,创建一个 `Miner` 接口并实现一些必要的操作。函数 `Min` 接受一个 `Miner` 类型变量的集合,然后计算并返回集合中最小的元素。