Fixes #198
This commit is contained in:
chai2010
2016-01-18 11:22:04 +08:00
parent 884ada9cd0
commit 9666211cd7
71 changed files with 107 additions and 105 deletions

View File

@@ -42,7 +42,7 @@ w = os.Stdout
w.Write([]byte("hello")) // "hello"
```
通常在編譯期,我們不知道接口值的動態類型是什麽,所以一個接口上的調用必使用動態分配。因爲不是直接進行調用,所以編譯器必把代碼生成在類型描述符的方法Write上然後間接調用那個地址。這個調用的接收者是一個接口動態值的拷貝os.Stdout。效果和下面這個直接調用一樣
通常在編譯期,我們不知道接口值的動態類型是什麽,所以一個接口上的調用必使用動態分配。因爲不是直接進行調用,所以編譯器必把代碼生成在類型描述符的方法Write上然後間接調用那個地址。這個調用的接收者是一個接口動態值的拷貝os.Stdout。效果和下面這個直接調用一樣
```go
os.Stdout.Write([]byte("hello")) // "hello"
@@ -93,7 +93,7 @@ var x interface{} = []int{1, 2, 3}
fmt.Println(x == x) // panic: comparing uncomparable type []int
```
考慮到這點,接口類型是非常與衆不同的。其它類型要麽是安全的可比較類型(如基本類型和指針)要麽是完全不可比較的類型(如切片,映射類型,和函數),但是在比較接口值或者包含了接口值的聚合類型時,我們必要意識到潛在的panic。同樣的風險也存在於使用接口作爲map的鍵或者switch的操作數。隻能比較你非常確定它們的動態值是可比較類型的接口值。
考慮到這點,接口類型是非常與衆不同的。其它類型要麽是安全的可比較類型(如基本類型和指針)要麽是完全不可比較的類型(如切片,映射類型,和函數),但是在比較接口值或者包含了接口值的聚合類型時,我們必要意識到潛在的panic。同樣的風險也存在於使用接口作爲map的鍵或者switch的操作數。隻能比較你非常確定它們的動態值是可比較類型的接口值。
當我們處理錯誤或者調試的過程中得知接口值的動態類型是非常有幫助的。所以我們使用fmt包的%T動作: