最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Golang 類型斷言的具體使用

 更新時(shí)間:2023年03月08日 10:41:07   作者:別搶我的辣條~  
本文主要介紹了Golang 類型斷言的具體使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一,如何檢測(cè)和轉(zhuǎn)換接口變量的類型

在Go語言的interface中可以是任何類型,所以Go給出了類型斷言來判斷某一時(shí)刻接口中所含有的類型,例如現(xiàn)在給出一個(gè)接口,名為InterfaceText:

x,err:=interfaceText.(T)//T是某一種類型

上式是接口斷言的一般形式,因?yàn)榇朔椒ú灰欢看味伎梢酝旰眠\(yùn)行,所以err的作用就是判斷是否出錯(cuò)。所以一般接口斷言常用以下寫法:

if v,err:=InterfaceText.(T);err {//T是一種類型
    possess(v)//處理v
    return
}

如果轉(zhuǎn)換合法,則v為InterfaceText轉(zhuǎn)換為類型T的值,err為ture,反之err為false。

值得注意的是:InterfaceText必須是接口類型?。?!

有些時(shí)候若是想僅判斷是否含有類型T,可以寫為:

if _,err:=InterfaceText.(T);err{
    //..
    return 
}

下面給出一個(gè)具體的例子幫助理解:

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
}

運(yùn)行結(jié)果:

二,類型判斷: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三種類型,就會(huì)執(zhí)行對(duì)應(yīng)的代碼,若都沒有,便會(huì)執(zhí)行default里的代碼。

如果僅判斷,而不使用值的話可以寫為:

switch InterfaceText.(type) {
    case *Square:
        fmt.Printf("text:%v",i)
    case *Circle:
        //..
    case nil:
        //..
    default:
        //..
    //..and so forth
}

有時(shí)為了方便,我們可以把它打包成一個(gè)函數(shù)來判斷一些未知類型:

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
        }
    }
}

可以這樣調(diào)用此方法:classifier(13, -14.3, false) 。

當(dāng)然也可以加入其他類型,這個(gè)看具體情況而定。

到此這篇關(guān)于Golang 類型斷言的具體使用的文章就介紹到這了,更多相關(guān)Golang 類型斷言內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Golang中Map按照Value大小排序的方法實(shí)例

    Golang中Map按照Value大小排序的方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于Golang中Map按照Value大小排序的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-03-03
  • go語言生成隨機(jī)數(shù)和隨機(jī)字符串的實(shí)現(xiàn)方法

    go語言生成隨機(jī)數(shù)和隨機(jī)字符串的實(shí)現(xiàn)方法

    隨機(jī)數(shù)在很多時(shí)候都可以用到,尤其是登錄時(shí),本文就詳細(xì)的介紹一下go語言生成隨機(jī)數(shù)和隨機(jī)字符串的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2021-12-12
  • Golang切片Slice功能操作詳情

    Golang切片Slice功能操作詳情

    這篇文章主要介紹了Golang切片功能操作詳情,切片是一個(gè)擁有相同類型元素的可變長度的序列。它是基于數(shù)組類型做的一層封,切片是一個(gè)引用類型,它的內(nèi)部結(jié)構(gòu)包含地址、長度和容量
    2022-09-09
  • golang占位符%v、%+v、%#v舉例詳解

    golang占位符%v、%+v、%#v舉例詳解

    這篇文章主要給大家介紹了關(guān)于golang占位符%v、%+v、%#v的相關(guān)資料,Go語言中的占位符通常用于格式化輸出,它們以%開頭,后跟一個(gè)字符,表示要轉(zhuǎn)換的數(shù)據(jù)類型,需要的朋友可以參考下
    2024-05-05
  • 一文深入探索Go語言中的循環(huán)結(jié)構(gòu)

    一文深入探索Go語言中的循環(huán)結(jié)構(gòu)

    在編程中,循環(huán)結(jié)構(gòu)扮演著重要的角色,它使我們能夠有效地重復(fù)執(zhí)行特定的代碼塊,以實(shí)現(xiàn)各種任務(wù)和邏輯,在Go語言中,for 是 Go 中唯一的循環(huán)結(jié)構(gòu),本文將深入探討Go語言中的for循環(huán)類型以及它們的用法
    2023-08-08
  • go語言中strings包的用法匯總

    go語言中strings包的用法匯總

    Golang語言 strings標(biāo)準(zhǔn)庫包主要涉及字符串的基本操作,下面我們來詳細(xì)分析下吧
    2018-10-10
  • Go log庫的使用示例詳解

    Go log庫的使用示例詳解

    Go語言內(nèi)置的log庫提供了基本的日志記錄功能,支持日志的格式化輸出、設(shè)置日志前綴、配置輸出位置等,可以通過標(biāo)準(zhǔn)logger或創(chuàng)建新的Logger對(duì)象來使用,log庫簡單易用,但功能有限,可能需要配合第三方日志庫如logrus、zap等來滿足復(fù)雜需求
    2024-09-09
  • Golang 并發(fā)以及通道的使用方式

    Golang 并發(fā)以及通道的使用方式

    這篇文章主要介紹了Golang 并發(fā)以及通道的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • 深入理解gorm如何和數(shù)據(jù)庫建立連接

    深入理解gorm如何和數(shù)據(jù)庫建立連接

    這篇文章主要為大家詳細(xì)介紹了gorm如何和數(shù)據(jù)庫建立連接,文中的示例代碼講解詳細(xì),對(duì)我們深入了解GO語言有一定的幫助,需要的小伙伴可以參考下
    2023-11-11
  • Golang單元測(cè)試與斷言編寫流程詳解

    Golang單元測(cè)試與斷言編寫流程詳解

    這篇文章主要介紹了Golang單元測(cè)試與斷言編寫流程,單元測(cè)試也是一個(gè)很重要的事情。單元測(cè)試是指在開發(fā)中,對(duì)一個(gè)函數(shù)或模塊的測(cè)試。其強(qiáng)調(diào)的是對(duì)單元進(jìn)行測(cè)試
    2022-12-12

最新評(píng)論

陈巴尔虎旗| 涟水县| 阿克苏市| 武平县| 石家庄市| 镶黄旗| 梧州市| 庆城县| 日土县| 平邑县| 张家口市| 青田县| 郧西县| 故城县| 盐源县| 德兴市| 陕西省| 五原县| 六安市| 瓦房店市| 鄱阳县| 鄂尔多斯市| 浦县| 京山县| 临夏县| 巴林右旗| 昭平县| 城固县| 满洲里市| 琼结县| 祁连县| 万宁市| 伊宁市| 诸暨市| 泸定县| 沅江市| 宁津县| 洪洞县| 庆城县| 泌阳县| 亳州市|