浏览代码

CH11.5 OK

leisore 10 年之前
父节点
当前提交
2d9f2700a7
共有 3 个文件被更改,包括 31 次插入1 次删除
  1. 1 1
      eBook/11.4.md
  2. 29 0
      eBook/11.5.md
  3. 1 0
      eBook/directory.md

+ 1 - 1
eBook/11.4.md

@@ -1,4 +1,4 @@
-# 11.3 类型判断:type-switch
+# 11.4 类型判断:type-switch
 
 接口变量的类型也可以使用一种特殊形式的 `swtich` 来检测:**type-swtich** (下面是 示例 11.4 的第二部分):
 

+ 29 - 0
eBook/11.5.md

@@ -0,0 +1,29 @@
+# 11.5 测试一个值是否实现了某个接口
+
+这是 11.3 类型断言中的一个特例:假定 `v` 是一个值,然后我们想测试它是否实现了 `Stringer` 接口,可以这样做:
+
+```go
+type Stringer interface {
+    String() string
+}
+
+if sv, ok := v.(Stringer); ok {
+    fmt.Printf("v implements String(): %s\n", sv.String()) // note: sv, not v
+}
+```
+
+`Print` 函数就是如此检测类型是否可以打印自身的。
+
+接口是一种契约,实现类型必须满足它,它描述了类型的行为,规定类型可以做什么。接口彻底将类型能做什么,以及如何做分离开来,使得相同接口的变量在不同的时刻表现出不同的行为,这就是多态的本质。
+
+编写参数是接口变量的函数,这使得它们更具有一般性。
+
+**使用接口使代码更具有普适性。**
+
+标准库里到处都使用了这个原则,如果对接口概念没有良好的把握,是不可能理解它是如何构建的。
+
+在接下来的章节中,我们会讨论两个重要的例子,试着去深入理解它们,这样你就可以更好的应用上面的原则。
+
+- [目录](directory.md)
+- 上一章:[11.4 类型判断:type-switch](11.4.md)
+- 下一节:[11.6 TODO](11.6.md)

+ 1 - 0
eBook/directory.md

@@ -98,6 +98,7 @@
     - 11.2 [接口嵌套接口](11.2.md)
     - 11.3 [类型断言:如何检测和转换接口变量的类型](11.3.md)
     - 11.4 [类型判断:type-switch](11.4.md)
+    - 11.5 [测试一个值是否实现了某个接口](11.5.md)
 
 ## 第三部分:Go 高级编程