您好,登錄后才能下訂單哦!
這篇文章主要介紹了Golang類型斷言如何使用的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Golang類型斷言如何使用文章都會有所收獲,下面我們一起來看看吧。
在Go語言的interface中可以是任何類型,所以Go給出了類型斷言來判斷某一時刻接口中所含有的類型,例如現在給出一個接口,名為InterfaceText:
x,err:=interfaceText.(T)//T是某一種類型
上式是接口斷言的一般形式,因為此方法不一定每次都可以完好運行,所以err的作用就是判斷是否出錯。所以一般接口斷言常用以下寫法:
if v,err:=InterfaceText.(T);err {//T是一種類型 possess(v)//處理v return }
如果轉換合法,則v為InterfaceText轉換為類型T的值,err為ture,反之err為false。
值得注意的是:InterfaceText必須是接口類型!!!
有些時候若是想僅判斷是否含有類型T,可以寫為:
if _,err:=InterfaceText.(T);err{ //.. return }
下面給出一個具體的例子幫助理解:
package main import ( "fmt" "math" ) type Square struct{ slide float32 } type Circle struct{ radius float32 } type Figure interface{ Area() float32 } func main(){ var fi Figure sq:=new(Square) sq.slide=5 fi=sq if v,err:=fi.(*Square);err { fmt.Printf("fi contain a variable of type : %v\n",v) }else { fmt.Println("fi does not contain a variable of Square") } if v2,ok:=fi.(*Circle);ok { fmt.Printf("fi contain a variable of type : %v\n",v2) }else { fmt.Println("fi does not contain a variable of Circle") } } func (s *Square) Area() float32{ return s.slide*s.slide } func (c *Circle) Area() float32{ return c.radius*c.radius*math.Pi }
運行結果:
這是另一種類型判斷的方法,此方法和switch很相似。直接看代碼:
switch x:=InterfaceText.(type) { case *Square: fmt.Printf("text:%v",i) case *Circle: //.. case nil: //.. default: //.. //..and so forth }
理解思路和switch很相似,如果InterfaceText中有*Square,*Circle,nil三種類型,就會執行對應的代碼,若都沒有,便會執行default里的代碼。
如果僅判斷,而不使用值的話可以寫為:
switch InterfaceText.(type) { case *Square: fmt.Printf("text:%v",i) case *Circle: //.. case nil: //.. default: //.. //..and so forth }
有時為了方便,我們可以把它打包成一個函數來判斷一些未知類型:
func classify(items...interface{}){ for i,x:=range items { switch x.(type) { case bool: fmt.Printf("text:%v",i) case int: //.. case float32: //.. default: //.. //..and so forth } } }
可以這樣調用此方法:classifier(13, -14.3, false) 。
當然也可以加入其他類型,這個看具體情況而定。
關于“Golang類型斷言如何使用”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“Golang類型斷言如何使用”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。