91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Golang類型斷言如何使用

發布時間:2023-03-08 11:29:51 來源:億速云 閱讀:114 作者:iii 欄目:開發技術

這篇文章主要介紹了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
}

運行結果:

Golang類型斷言如何使用

二,類型判斷:type-switch

這是另一種類型判斷的方法,此方法和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類型斷言如何使用”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

禄劝| 蕉岭县| 醴陵市| 思南县| 滕州市| 洞头县| 新绛县| 河津市| 金沙县| 安庆市| 肥乡县| 金川县| 福清市| 永德县| 鹿泉市| 大方县| 喀喇沁旗| 昂仁县| 安平县| 宜兰市| 长岛县| 陕西省| 六枝特区| 海宁市| 绥化市| 仁化县| 龙胜| 文安县| 黑龙江省| 平果县| 安乡县| 始兴县| 南汇区| 栾城县| 陕西省| 开封市| 广饶县| 温泉县| 贞丰县| 靖安县| 隆子县|