溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

golang中接口對(duì)象如何轉(zhuǎn)型

發(fā)布時(shí)間:2021-10-11 16:32:54 來(lái)源:億速云 閱讀:96 作者:小新 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要介紹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è)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI