diff --git a/source/c01/c01_14.md b/source/c01/c01_14.md index 558a65906fafadb99a64a2cc71fed4c7cfaecfe4..7d8f14516040623ae9df19d1d3d366a190412653 100644 --- a/source/c01/c01_14.md +++ b/source/c01/c01_14.md @@ -183,6 +183,11 @@ hello is string - 如果你的值是 nil,那么匹配的是 `case nil` - 如果你的值在 switch-case 里并没有匹配对应的类型,那么走的是 default 分支 +此外,还有两点需要你格外注意 + +1. 类型断言,仅能对静态类型为空接口(interface{})的对象进行断言,否则会抛出错误,具体内容可以参考:[关于接口的三个"潜规则"](http://golang.iswbm.com/en/latest/c02/c02_07.html) +2. 类型断言完成后,实际上会返回静态类型为你断言的类型的对象,而要清楚原来的静态类型为空接口类型(interface{}),这是 Go 的隐式转换。 + ## 参考文章 - [Explain Type Assertions in Go](https://stackoverflow.com/questions/38816843/explain-type-assertions-in-go) diff --git a/source/c01/c01_14.rst b/source/c01/c01_14.rst index 43737a5a8882a8f6258f14171a85fa1fe056a79a..b01e3a587116def0973072b4e56e9f634f14c8d2 100644 --- a/source/c01/c01_14.rst +++ b/source/c01/c01_14.rst @@ -192,6 +192,12 @@ Type Switch - 如果你的值在 switch-case 里并没有匹配对应的类型,那么走的是 default 分支 +此外,还有两点需要你格外注意 + +1. 类型断言,仅能对静态类型为空接口(interface{})的对象进行断言,否则会抛出错误,具体内容可以参考:\ `关于接口的三个“潜规则” `__ +2. 类型断言完成后,实际上会返回静态类型为你断言的类型的对象,而要清楚原来的静态类型为空接口类型(interface{}),这是 + Go 的隐式转换。 + 参考文章 --------