interface{}、型別斷言
在 golang 中 interface{} 可用於向函式傳遞任意型別的變數, 但在函式內部使用的話, 該變數的型別就是 interface{}, 也稱為空介面型別
比如我們定義一個函式, 輸出字串, 但引數是 interface{} 型別
func echoString(content interface{}) { fmt.Println(content ) }
當我們呼叫echoString("輸出字串") 方法, 會報錯因為content是interface{}型別, 而不是string型別
介面型別向普通型別的轉換稱為型別斷言(執行期確定)
對於上述呼叫, 可以通過修改方法echoString
func echoString(content interface{}) { result, _ := content.(string)//通過斷言實現型別轉換 fmt.Println(result) }
這個時候又會有潛在的威脅, 如果我們給該方法傳入的是 int 型別, 那麼在斷言的時候會報錯, 這個時候我們需要完善程式碼
func echoString(content interface{}) { result, err := content.(string) if err != nil {// 斷言失敗 fmt.Println(err .Error())// 輸出失敗原因 return } fmt.Println(result) }
不同型別變數的運算必須進行顯式的型別轉換,否者結果可能出錯