數據類型 | 說明 |
map | panic,不可比較 |
切片([]T) | panic,不可比較 |
通道(channel) | 可比較,必須由同一個 make 生成,也就是同一個通道纔會是 true,否則爲 false |
數組([容量]T) | 可比較,編譯期知道兩個數組是否一致 |
結構體 | 可比較,可以逐個比較結構體的值(字段順序) |
函數 | 可比較 |
空接口是接口類型的特殊形式,空接口沒有任何方法,因此任何類型都無須實現空接口。從實現的角度看,任何值都滿足這個接口的需求。因此空接口類型可以保存任何值,也可以從空接口中取出原值。
空接口的內部實現保存了對象的類型和指針。使用空接口保存一個數據的過程會比直接用數據對應類型的變量保存稍慢。因此在開發中應在需要的地方使用空接口,而不是在所有地方使用空接口。
```
func
DoSomething(v
interface
{}) {
// ...
}
```
v
不是任意類型,它是 interface{}
類型。雖然我們可以將任意的值傳遞給這個函數, 當將值傳遞給DoSomething
函數時,Go 運行時將執行類型轉換(如果需要)並將值轉換爲 interface{}
類型的值。所有值在運行時只有一個類型,而 v
的一個靜態類型是 interface{}
。一般寫業務代碼時,函數內會根據具體需求進行類型斷言轉換,才能拿到v變量具體的值然後進行其他運算處理。
```
cannot use memory.GetValue("lisi") (type interface {}) as type string in argument to t.common.Logf: need type assertion
```