我們知道,在Python里面,要判斷一個變數是不是某個型別,只需要使用isinstance這個關鍵詞:
def calc(param): if isinstance(param, int): return param + 1 elif isinstance(param, str): return None
Golang作為靜態語言,雖然大多數情況下,一個變數的型別在它定義的時候就已經確定了,不會存在一會兒是整型,一會兒是字串的情況,但是Golang有一個型別叫做interface,它里面可以儲存任意型別的資料,我們來看一個例子:
多人學習python,不知道從何學起,
很多人學習python,掌握了基本語法過后,不知道在哪里尋找案例上手,
很多已經做案例的人,卻不知道如何去學習更加高深的知識,
那么針對這三類人,我給大家提供一個好的學習平臺,免費領取視頻教程,電子書籍,以及課程的源代碼!??¤
QQ群:1057034340
package mainimport ( "fmt")func main() { var param interface{} param = 123 fmt.Println("一開始, param是:", param) param = "xyz" fmt.Println("后來,param是:", param)}
運行效果如下圖所示:
在一般情況下,我們確實不會主動給自己找麻煩,故意定義一個interface型別到處用,但有時候卻不得不這樣做,例如要創建一個map,它的值可能有多種型別,此時必須使用interface,
所以,如果我們的某個函式接收的引數是interface,并且需要根據里面存放的資料的不同型別來實作不同的邏輯,應該怎么做呢?在Golang里面有如下幾種做法,
僅僅列印型別
如果只需要把interface里面的資料型別列印出來,那么可以使用%T來實作:
package mainimport ( "fmt")func main() { var param interface{} param = 123 fmt.Printf("資料型別為:%T\n", param)}
運行效果如下圖所示:
如果需要把這個型別存放到另外一個變數里面,也很容易:
package mainimport ( "fmt")func main() { var param interface{} param = 123 param_type := fmt.Sprintf("%T", param) if param_type == "int" { //注意,這里的型別都是字串形式的 fmt.Println("確認是整型!") }}
運行效果如下圖所示:
多重判斷
如果interface里面的資料可能有多種型別,每種型別都有不同的處理方案,那么可以使用switch type語法:
package mainimport ( "fmt")func main() { var param interface{} param = 123 switch param.(type) { case int: //注意,這里的型別都是型別本身 fmt.Println("資料是整型!") case string: fmt.Println("資料是字串!") default: fmt.Println("其它型別!") }}
運行效果如下圖所示:
但需要注意的是,param.(type)這種語法只能在switch ... type中使用,單獨使用會報錯,
僅僅判斷是不是某個型別
如果我只需要判斷interface里面的資料是不是某個特定的型別,那么還有更簡單的辦法:
package mainimport ( "fmt")func main() { var param interface{} param = 123 _, yes := param.(float64) if yes { fmt.Println("是float64型別") } else { fmt.Println("不是float64型別") }}
運行效果如下圖所示:
其中,param.(特定型別)回傳兩個資料,第一個資料就是介面里面的資料,第二個資料是bool型別,如果介面里面的資料是特定型別,就回傳true,否則就回傳false,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/222677.html
標籤:其他
上一篇:用Python解“智力游戲”
下一篇:Java基礎
