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

GO語言類型轉(zhuǎn)換和類型斷言實(shí)例分析

 更新時(shí)間:2015年01月15日 16:08:31   投稿:shichen2014  
這篇文章主要介紹了GO語言類型轉(zhuǎn)換和類型斷言,以實(shí)例形式詳細(xì)分析了類型轉(zhuǎn)換和類型斷言的概念與使用技巧,需要的朋友可以參考下

本文實(shí)例講述了GO語言類型轉(zhuǎn)換和類型斷言的用法。分享給大家供大家參考。具體分析如下:

由于Go語言不允許隱式類型轉(zhuǎn)換。而類型轉(zhuǎn)換和類型斷言的本質(zhì),就是把一個(gè)類型轉(zhuǎn)換到另一個(gè)類型。

一、類型轉(zhuǎn)換

(1)、語法:<結(jié)果類型> := <目標(biāo)類型> ( <表達(dá)式> )

(2)、類型轉(zhuǎn)換是用來在不同但相互兼容的類型之間的相互轉(zhuǎn)換的方式,所以,當(dāng)類型不兼容的時(shí)候,是無法轉(zhuǎn)換的。如下:

復(fù)制代碼 代碼如下:
func test4() {
    var var1 int = 7
    fmt.Printf("%T->%v\n", var1, var1)
    var2 := float32(var1)
    var3 := int64(var1)
    //var4 := []int8(var1)
    //var5 := []string(var1)
    fmt.Printf("%T->%v\n", var2, var2)
    fmt.Printf("%T->%v\n", var3, var3)
    //fmt.Printf("%T->%d", var4, var4)
    //fmt.Printf("%T->%d", var5, var5)
}

其中,var4和var5處運(yùn)行會(huì)報(bào)錯(cuò)。因?yàn)轭愋筒患嫒?。注釋后,輸出如下?br />

復(fù)制代碼 代碼如下:
int->7
float32->7
int64->7

值得注意的是,如果某些類型可能引起誤會(huì),應(yīng)該用括號(hào)括起來轉(zhuǎn)換,如下:
復(fù)制代碼 代碼如下:
func test5() {
    //創(chuàng)建一個(gè)int變量,并獲得它的指針
    var1 := new(int32)
    fmt.Printf("%T->%v\n", var1, var1)
    var2 := *int32(var1)
    fmt.Printf("%T->%v\n", var2, var2)
}

*int32(var1)相當(dāng)于*(int32(var1)),一個(gè)指針,當(dāng)然不能直接轉(zhuǎn)換成一個(gè)int32類型,所以該表達(dá)式直接編譯錯(cuò)誤。將該表達(dá)式改為 (*int32)(var1)就可以正常輸出了。

二、類型斷言

(1)語法:

  <目標(biāo)類型的值>,<布爾參數(shù)> := <表達(dá)式>.( 目標(biāo)類型 ) // 安全類型斷言

  <目標(biāo)類型的值> := <表達(dá)式>.( 目標(biāo)類型 )  //非安全類型斷言

(2)類型斷言的本質(zhì),跟類型轉(zhuǎn)換類似,都是類型之間進(jìn)行轉(zhuǎn)換,不同之處在于,類型斷言實(shí)在接口之間進(jìn)行,相當(dāng)于Java中,對(duì)于一個(gè)對(duì)象,把一種接口的引用轉(zhuǎn)換成另一種。

我們先來看一個(gè)最簡(jiǎn)單的錯(cuò)誤的類型斷言:

復(fù)制代碼 代碼如下:
func test6() {
    var i interface{} = "kk"
    j := i.(int)
    fmt.Printf("%T->%d\n", j, j)
}

var i interface{} = "KK" 某種程度上相當(dāng)于java中的,Object i = "KK";

現(xiàn)在把這個(gè) i 轉(zhuǎn)換成 int 類型,系統(tǒng)內(nèi)部檢測(cè)到這種不匹配,就會(huì)調(diào)用內(nèi)置的panic()函數(shù),拋出一個(gè)異常。

改一下,把 i 的定義改為:var i interface{} = 99,就沒問題了。輸出為:

復(fù)制代碼 代碼如下:
int->99

以上是不安全的類型斷言。我們來看一下安全的類型斷言:
復(fù)制代碼 代碼如下:
func test6() {
    var i interface{} = "TT"
    j, b := i.(int)
    if b {
        fmt.Printf("%T->%d\n", j, j)
    } else {
        fmt.Println("類型不匹配")
    }
}

輸出“類型不匹配”。

希望本文所述對(duì)大家的GO語言程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • golang微服務(wù)框架基礎(chǔ)Gin基本路由使用詳解

    golang微服務(wù)框架基礎(chǔ)Gin基本路由使用詳解

    這篇文章主要為大家介紹了golang微服務(wù)框架Gin基本路由的使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-11-11
  • Golang中interface轉(zhuǎn)string輸出打印方法

    Golang中interface轉(zhuǎn)string輸出打印方法

    這篇文章主要給大家介紹了關(guān)于Golang中interface轉(zhuǎn)string輸出打印的相關(guān)資料,在go語言中interface轉(zhuǎn)string可以直接使用fmt提供的fmt函數(shù),文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-02-02
  • Golang使用etcd構(gòu)建分布式鎖的示例分享

    Golang使用etcd構(gòu)建分布式鎖的示例分享

    在本教程中,我們將學(xué)習(xí)如何使用Go和etcd構(gòu)建分布式鎖系統(tǒng),分布式鎖系統(tǒng)對(duì)于管理對(duì)分布式系統(tǒng)中共享資源的并發(fā)訪問至關(guān)重要,它有助于維護(hù)一致性,防止競(jìng)爭(zhēng)條件,并確保在任何給定時(shí)間只有一個(gè)進(jìn)程獨(dú)占訪問資源,需要的朋友可以參考下
    2025-01-01
  • Go實(shí)現(xiàn)SSE消息推送的項(xiàng)目實(shí)戰(zhàn)

    Go實(shí)現(xiàn)SSE消息推送的項(xiàng)目實(shí)戰(zhàn)

    本文主要介紹了Go實(shí)現(xiàn)SSE消息推送的項(xiàng)目實(shí)戰(zhàn),結(jié)合JavaScript前端集成,構(gòu)建實(shí)時(shí)數(shù)據(jù)推送系統(tǒng),文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-05-05
  • 如何在Go中使用Casbin進(jìn)行訪問控制

    如何在Go中使用Casbin進(jìn)行訪問控制

    這篇文章主要介紹了如何在Go中使用Casbin進(jìn)行訪問控制,Casbin是一個(gè)強(qiáng)大的、高效的開源訪問控制框架,其權(quán)限管理機(jī)制支持多種訪問控制模型,Casbin只負(fù)責(zé)訪問控制
    2022-08-08
  • golang并發(fā)執(zhí)行的幾種方式小結(jié)

    golang并發(fā)執(zhí)行的幾種方式小結(jié)

    本文主要介紹了golang并發(fā)執(zhí)行的幾種方式小結(jié),主要包括了Channel,WaitGroup ,Context,使用這三種機(jī)制中的一種或者多種可以達(dá)到并發(fā)控制很好的效果,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-08-08
  • Go實(shí)現(xiàn)雙向鏈表的示例代碼

    Go實(shí)現(xiàn)雙向鏈表的示例代碼

    這篇文章主要介紹了Go實(shí)現(xiàn)雙向鏈表的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 使用Go語言連接和操作數(shù)據(jù)庫的基本步驟

    使用Go語言連接和操作數(shù)據(jù)庫的基本步驟

    在Go語言中,連接和操作數(shù)據(jù)庫通常使用database/sql包,它提供了一個(gè)數(shù)據(jù)庫抽象層,支持多種數(shù)據(jù)庫引擎,如MySQL、PostgreSQL、SQLite等,下面我將以MySQL為例,詳細(xì)講解如何使用Go語言連接和操作數(shù)據(jù)庫,需要的朋友可以參考下
    2024-06-06
  • Go語言O(shè)RM框架構(gòu)造查詢條件示例詳解

    Go語言O(shè)RM框架構(gòu)造查詢條件示例詳解

    這篇文章主要為大家介紹了Go語言O(shè)RM框架構(gòu)造查詢條件示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Go語言實(shí)現(xiàn)的樹形結(jié)構(gòu)數(shù)據(jù)比較算法實(shí)例

    Go語言實(shí)現(xiàn)的樹形結(jié)構(gòu)數(shù)據(jù)比較算法實(shí)例

    這篇文章主要介紹了Go語言實(shí)現(xiàn)的樹形結(jié)構(gòu)數(shù)據(jù)比較算法,實(shí)例分析了樹形結(jié)構(gòu)數(shù)據(jù)比較算法的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02

最新評(píng)論

庄河市| 建始县| 潜江市| 富阳市| 永德县| 芦山县| 庆阳市| 金川县| 邓州市| 卢龙县| 洞口县| 绍兴市| 长寿区| 东阳市| 云梦县| 鞍山市| 郴州市| 隆子县| 庄河市| 东明县| 延长县| 卢龙县| 库尔勒市| 湘西| 青冈县| 仙桃市| 沁阳市| 柳州市| 图木舒克市| 张家口市| 贡山| 洱源县| 上林县| 昌乐县| 沂水县| 寻甸| 西畴县| 利津县| 瓦房店市| 平谷区| 怀宁县|