您好,登錄后才能下訂單哦!
這篇文章主要介紹golang中接口對(duì)象如何轉(zhuǎn)型,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
接口對(duì)象的轉(zhuǎn)型有兩種方式:
1. 方式一:instance,ok:=接口對(duì)象.(實(shí)際類型)
如果該接口對(duì)象是對(duì)應(yīng)的實(shí)際類型,那么instance就是轉(zhuǎn)型之后對(duì)象,ok的值為true
配合if...else if...使用
2. 方式二:
接口對(duì)象.(type)
配合switch...case語(yǔ)句使用
示例:
package main import ( "fmt" "math" ) type shape interface { perimeter() int area() int } type rectangle struct { a int // 長(zhǎng) b int // 寬 } func (r rectangle) perimeter() int { return (r.a + r.b) * 2 } func (r rectangle) area() int { return r.a * r.b } type circle struct { radios int } func (c circle) perimeter() int { return 2 * c.radios * int(math.Round(math.Pi)) } func (c circle) area() int { return int(math.Round(math.Pow(float64(c.radios), 2) * math.Pi)) } func getType(s shape) { if i, ok := s.(rectangle); ok { fmt.Printf("長(zhǎng)方形的長(zhǎng):%d,長(zhǎng)方形的寬是:%d\n", i.a, i.b) } else if i, ok := s.(circle); ok { fmt.Printf("圓形的半徑是:%d\n", i.radios) } } func getType2(s shape) { switch i := s.(type) { case rectangle: fmt.Printf("長(zhǎng)方形的長(zhǎng):%d,長(zhǎng)方形的寬是:%d\n", i.a, i.b) case circle: fmt.Printf("圓形的半徑是:%d\n", i.radios) } } func getResult(s shape) { fmt.Printf("圖形的周長(zhǎng)是:%d,圖形的面積是:%d\n", s.perimeter(), s.area()) } func main() { r := rectangle{a: 10, b: 20} getType(r) getResult(r) c := circle{radios: 5} getType2(c) getResult(c) }
上面的例子使用的是方式一,如果要使用方式2,可以將getType()函數(shù)改為:
func getType(s shape) { switch i := s.(type) { case rectangle: fmt.Printf("圖形的長(zhǎng):%.2f,圖形的寬:%.2f \n", i.a, i.b) case triangle: fmt.Printf("圖形的第一個(gè)邊:%.2f,圖形的第二個(gè)邊:%.2f,圖形的第三個(gè)邊:%.2f \n",i.a,i.b,i.c) case circular: fmt.Printf("圖形的半徑:%.2f \n",i.radius) } }
以上是“golang中接口對(duì)象如何轉(zhuǎn)型”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。