亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Golang 類型斷言的具體使用

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

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

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

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

上式是接口斷言的一般形式,因為此方法不一定每次都可以完好運行,所以err的作用就是判斷是否出錯。所以一般接口斷言常用以下寫法:

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

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

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

有些時候若是想僅判斷是否含有類型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
}

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

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

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

有時為了方便,我們可以把它打包成一個函數(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) 。

當然也可以加入其他類型,這個看具體情況而定。

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

相關(guān)文章

  • Golang實現(xiàn)優(yōu)雅的將struct轉(zhuǎn)換為map

    Golang實現(xiàn)優(yōu)雅的將struct轉(zhuǎn)換為map

    在項目實踐中,有時候我們需要將struct結(jié)構(gòu)體轉(zhuǎn)為map映射表,然后基于map做數(shù)據(jù)裁剪或操作。那么下面我來介紹下常用的兩種轉(zhuǎn)換方式,希望對大家有所幫助
    2023-01-01
  • Go?gin框架加載Html模板文件的方法

    Go?gin框架加載Html模板文件的方法

    這篇文章主要介紹了Go?gin框架加載Html模板文件的方法,Gin框架沒有內(nèi)置靜態(tài)文件服務(wù),但可以使用gin.Static或gin.StaticFS中間件來提供靜態(tài)文件服務(wù),文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下
    2024-03-03
  • Go語言sort包函數(shù)使用示例

    Go語言sort包函數(shù)使用示例

    這篇文章主要為大家介紹了Go語言sort包函數(shù)使用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • Golang對MongoDB數(shù)據(jù)庫的操作簡單封裝教程

    Golang對MongoDB數(shù)據(jù)庫的操作簡單封裝教程

    mongodb官方?jīng)]有關(guān)于go的mongodb的驅(qū)動,因此只能使用第三方驅(qū)動,mgo就是使用最多的一種。下面這篇文章主要給大家介紹了關(guān)于利用Golang對MongoDB數(shù)據(jù)庫的操作簡單封裝的相關(guān)資料,需要的朋友可以參考下
    2018-07-07
  • Golang并發(fā)發(fā)送HTTP請求的各種方法

    Golang并發(fā)發(fā)送HTTP請求的各種方法

    在 Golang 領(lǐng)域,并發(fā)發(fā)送 HTTP 請求是優(yōu)化 Web 應(yīng)用程序的一項重要技能,本文探討了實現(xiàn)此目的的各種方法,從基本的 goroutine 到涉及通道和sync.WaitGroup 的高級技術(shù),需要的朋友可以參考下
    2024-02-02
  • 深入了解Golang中的反射機制

    深入了解Golang中的反射機制

    反射是指在程序運行時動態(tài)地檢查和修改對象的能力,在Go語言中,通過反射可以在運行時檢查變量的類型、獲取結(jié)構(gòu)體字段和方法的信息,以及動態(tài)調(diào)用方法等操作,本文將帶你深入了解Golang中的反射機制,感興趣的同學可以跟著小編一起來學習
    2023-05-05
  • 一文帶你了解Golang中interface的設(shè)計與實現(xiàn)

    一文帶你了解Golang中interface的設(shè)計與實現(xiàn)

    本文就來詳細說說為什么說?接口本質(zhì)是一種自定義類型,以及這種自定義類型是如何構(gòu)建起?go?的?interface?系統(tǒng)的,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-01-01
  • golang sql語句超時控制方案及原理

    golang sql語句超時控制方案及原理

    一般應(yīng)用程序在執(zhí)行一條sql語句時,都會給這條sql設(shè)置一個超時時間,本文主要介紹了golang sql語句超時控制方案及原理,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • Go語言實現(xiàn)IP段范圍校驗示例

    Go語言實現(xiàn)IP段范圍校驗示例

    這篇文章主要介紹了Go語言實現(xiàn)IP段范圍校驗示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • Golang Map value不可尋址使用指針類型代替示例詳解

    Golang Map value不可尋址使用指針類型代替示例詳解

    這篇文章主要為大家介紹了Golang Map value不可尋址使用指針類型代替示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11

最新評論