mirror of
https://github.com/unknwon/the-way-to-go_ZH_CN.git
synced 2025-08-12 06:36:43 +08:00
CH11.04 OK
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# 11.3 <20><><EFBFBD>μ<EFBFBD><CEBC><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD>ӿڱ<D3BF><DAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD><EFBFBD><EFBFBD>
|
||||
# 11.3 <20><><EFBFBD>Ͷ<EFBFBD><EFBFBD>ԣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD>ӿڱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
һ<EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵ı<EFBFBD><EFBFBD><EFBFBD> `varI` <20>п<EFBFBD><D0BF><EFBFBD><D4B0><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD><EFBFBD>͵<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ַ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> **<EFBFBD><EFBFBD>̬** <20><><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD>д洢<D0B4><E6B4A2>ֵ<EFBFBD><D6B5>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD>͡<EFBFBD><CDA1><EFBFBD>ִ<EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD>ж<EFBFBD>̬<EFBFBD><CCAC><EFBFBD>Ϳ<EFBFBD><CDBF>ܻ<EFBFBD><DCBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD><C7BF>Է<EFBFBD><D4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿڱ<D3BF><DAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͡<EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD><C7BF><EFBFBD>ʹ<EFBFBD><CAB9> **<EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD><EFBFBD><EFBFBD>** <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3>ʱ<EFBFBD><CAB1> `varI` <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> `T` <20><>ֵ<EFBFBD><D6B5>
|
||||
|
||||
@@ -89,8 +89,8 @@ func (ci *Circle) Area() float32 {
|
||||
|
||||
**<EFBFBD><EFBFBD>ע**
|
||||
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> `areaIntf.(*Square)` <20>е<EFBFBD> `*` <20>ţ<EFBFBD><C5A3>ᵼ<EFBFBD>±<EFBFBD><C2B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>`impossible type assertion: Square does not implement Shaper (Area method has pointer receiver)`
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> `areaIntf.(*Square)` <20>е<EFBFBD> `*` <20>ţ<EFBFBD><C5A3>ᵼ<EFBFBD>±<EFBFBD><C2B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>`impossible type assertion: Square does not implement Shaper (Area method has pointer receiver)`<EFBFBD><EFBFBD>
|
||||
|
||||
- [Ŀ¼](directory.md)
|
||||
- <20><>һ<EFBFBD>£<EFBFBD>[11.2 <20>ӿ<EFBFBD>Ƕ<EFBFBD>ӿ<D7BD>](11.2.md)
|
||||
- <20><>һ<EFBFBD>ڣ<EFBFBD>[11.4 <20><><EFBFBD><EFBFBD>switch](11.4.md)
|
||||
- <20><>һ<EFBFBD>ڣ<EFBFBD>[11.4 <20><><EFBFBD><EFBFBD><EFBFBD>жϣ<EFBFBD>type-switch](11.4.md)
|
76
eBook/11.4.md
Normal file
76
eBook/11.4.md
Normal file
@@ -0,0 +1,76 @@
|
||||
# 11.3 <20><><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6>type-switch
|
||||
|
||||
<EFBFBD>ӿڱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD> `swtich` <20><><EFBFBD><EFBFBD><EFBFBD>⣺**type-swtich** <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ʾ<><CABE> 11.4 <20>ĵڶ<C4B5><DAB6><EFBFBD><EFBFBD>֣<EFBFBD><D6A3><EFBFBD>
|
||||
|
||||
```go
|
||||
switch t := areaIntf.(type) {
|
||||
case *Square:
|
||||
fmt.Printf("Type Square %T with value %v\n", t, t)
|
||||
case *Circle:
|
||||
fmt.Printf("Type Circle %T with value %v\n", t, t)
|
||||
case nil:
|
||||
fmt.Printf("nil value: nothing to check?\n")
|
||||
default:
|
||||
fmt.Printf("Unexpected type %T\n", t)
|
||||
}
|
||||
```
|
||||
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
Type Square *main.Square with value &{5}
|
||||
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> `t` <20>õ<EFBFBD><C3B5><EFBFBD> `areaIntf` <20><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD> <20><><EFBFBD><EFBFBD> `case` <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>оٵ<D0BE><D9B5><EFBFBD><EFBFBD>ͣ<EFBFBD>`nil` <20><><EFBFBD>⣩<EFBFBD><E2A3A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>ֶ<EFBFBD>Ӧ<EFBFBD>Ľӿڣ<D3BF><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD> `Shaper`<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD> `case` <20><><EFBFBD><EFBFBD><EFBFBD>оٵ<D0BE><D9B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ͻ<EFBFBD>ִ<EFBFBD><D6B4>`default` <20><><EFBFBD>䡣
|
||||
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> `type-switch` <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> `type-switch` <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> `fallthrough` <20><>
|
||||
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Dz<EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD>Ϳ<EFBFBD><EFBFBD>Բ<EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD>䣬<EFBFBD><EFBFBD><EFBFBD>磺
|
||||
|
||||
```go
|
||||
switch areaIntf.(type) {
|
||||
case *Square:
|
||||
// TODO
|
||||
case *Circle:
|
||||
// TODO
|
||||
...
|
||||
default:
|
||||
// TODO
|
||||
}
|
||||
```
|
||||
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>Ƭ<EFBFBD><EFBFBD>չʾ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>ຯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ɱ䳤<EFBFBD>Ȳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>飬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>ص<EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>в<EFBFBD>ͬ<EFBFBD>Ķ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
```go
|
||||
|
||||
func classifier(items ...interface{}) {
|
||||
for i, x := range items {
|
||||
switch x.(type) {
|
||||
case bool:
|
||||
fmt.Printf("Param #%d is a bool\n", i)
|
||||
case float64:
|
||||
fmt.Printf("Param #%d is a float64\n", i)
|
||||
case int, int64:
|
||||
fmt.Printf("Param #%d is a int\n", i)
|
||||
case nil:
|
||||
fmt.Printf("Param #%d is a nil\n", i)
|
||||
case string:
|
||||
fmt.Printf("Param #%d is a string\n", i)
|
||||
default:
|
||||
fmt.Printf("Param #%d is unknown\n", i)
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô˷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>`classifier(13, -14.3, "BELGIUM", complex(1, 2), nil, false)` <20><>
|
||||
|
||||
<EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD>ġ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ֪<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> JSON <20><> XML <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD>Ͳ<EFBFBD><CDB2>Ժ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD>dz<EFBFBD><C7B3><EFBFBD><EFBFBD>á<EFBFBD>
|
||||
|
||||
<EFBFBD><EFBFBD> ʾ<><CABE>12.17(xml.go) <20>н<EFBFBD><D0BD><EFBFBD> XML <20>ĵ<EFBFBD><C4B5>ǣ<EFBFBD><C7A3><EFBFBD><EFBFBD>Ǿͻ<C7BE><CDBB>õ<EFBFBD> `type-switch` <20><>
|
||||
|
||||
<EFBFBD><EFBFBD>ϰ 11.4<EFBFBD><EFBFBD>simple_interface2.go
|
||||
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ϰ 11.1 <20>е<EFBFBD><D0B5><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> `RSimple`<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳʵ<EFBFBD><EFBFBD><EFBFBD>˽ӿ<EFBFBD> `Simpler`<EFBFBD><EFBFBD>дһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> `fi`<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> `Simple` <20><> `RSimple` <20><><EFBFBD>͵ı<CDB5><C4B1><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
- [Ŀ¼](directory.md)
|
||||
- <20><>һ<EFBFBD>£<EFBFBD>[11.3 <20><><EFBFBD>Ͷ<EFBFBD><CDB6>ԣ<EFBFBD><D4A3><EFBFBD><EFBFBD>μ<EFBFBD><CEBC><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD>ӿڱ<D3BF><DAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>](11.3.md)
|
||||
- <20><>һ<EFBFBD>ڣ<EFBFBD>[11.5 <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ֵ<EFBFBD>Ƿ<EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>ӿ<EFBFBD>](11.5.md)
|
@@ -96,7 +96,8 @@
|
||||
- 第11章:[接口(interface)与反射(reflection)](11.0.md)
|
||||
- 11.1 [接口是什么](11.1.md)
|
||||
- 11.2 [接口嵌套接口](11.2.md)
|
||||
- 11.3 [11.3 如何检测和转换接口变量的类型:类型断言](11.3.md)
|
||||
- 11.3 [类型断言:如何检测和转换接口变量的类型](11.3.md)
|
||||
- 11.4 [类型判断:type-switch](11.4.md)
|
||||
|
||||
## 第三部分:Go 高级编程
|
||||
|
||||
|
Reference in New Issue
Block a user