From 2d9f2700a73ca8a3f7fa095fb1978503e1cca0a9 Mon Sep 17 00:00:00 2001 From: leisore Date: Sat, 29 Aug 2015 17:29:47 +0800 Subject: [PATCH] CH11.5 OK --- eBook/11.4.md | 2 +- eBook/11.5.md | 29 +++++++++++++++++++++++++++++ eBook/directory.md | 1 + 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 eBook/11.5.md diff --git a/eBook/11.4.md b/eBook/11.4.md index c2d9d0f..2e94060 100644 --- a/eBook/11.4.md +++ b/eBook/11.4.md @@ -1,4 +1,4 @@ -# 11.3 类型判断:type-switch +# 11.4 类型判断:type-switch 接口变量的类型也可以使用一种特殊形式的 `swtich` 来检测:**type-swtich** (下面是 示例 11.4 的第二部分): diff --git a/eBook/11.5.md b/eBook/11.5.md new file mode 100644 index 0000000..d9ad216 --- /dev/null +++ b/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) \ No newline at end of file diff --git a/eBook/directory.md b/eBook/directory.md index acb15bf..6a8412a 100644 --- a/eBook/directory.md +++ b/eBook/directory.md @@ -98,6 +98,7 @@ - 11.2 [鎺ュ彛宓屽鎺ュ彛](11.2.md) - 11.3 [绫诲瀷鏂█锛氬浣曟娴嬪拰杞崲鎺ュ彛鍙橀噺鐨勭被鍨媇(11.3.md) - 11.4 [绫诲瀷鍒ゆ柇锛歵ype-switch](11.4.md) + - 11.5 [娴嬭瘯涓涓兼槸鍚﹀疄鐜颁簡鏌愪釜鎺ュ彛](11.5.md) ## 绗笁閮ㄥ垎锛欸o 楂樼骇缂栫▼