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

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

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

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

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

一、類型轉(zhuǎn)換

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

(2)、類型轉(zhuǎn)換是用來在不同但相互兼容的類型之間的相互轉(zhuǎn)換的方式,所以,當(dāng)類型不兼容的時候,是無法轉(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處運行會報錯。因為類型不兼容。注釋后,輸出如下:

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

值得注意的是,如果某些類型可能引起誤會,應(yīng)該用括號括起來轉(zhuǎn)換,如下:
復(fù)制代碼 代碼如下:
func test5() {
    //創(chuàng)建一個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)),一個指針,當(dāng)然不能直接轉(zhuǎn)換成一個int32類型,所以該表達式直接編譯錯誤。將該表達式改為 (*int32)(var1)就可以正常輸出了。

二、類型斷言

(1)語法:

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

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

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

我們先來看一個最簡單的錯誤的類型斷言:

復(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)在把這個 i 轉(zhuǎn)換成 int 類型,系統(tǒng)內(nèi)部檢測到這種不匹配,就會調(diào)用內(nèi)置的panic()函數(shù),拋出一個異常。

改一下,把 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("類型不匹配")
    }
}

輸出“類型不匹配”。

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

相關(guān)文章

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

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

    這篇文章主要為大家介紹了golang微服務(wù)框架Gin基本路由的使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    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ù),文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-02-02
  • Golang使用etcd構(gòu)建分布式鎖的示例分享

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

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

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

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

    如何在Go中使用Casbin進行訪問控制

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

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

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

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

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

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

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

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

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

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

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

最新評論

卓尼县| 嫩江县| 抚顺市| 疏附县| 托克逊县| 南靖县| 香河县| 镇坪县| 法库县| 镇康县| 东港市| 花垣县| 屏东县| 沙田区| 通州市| 清镇市| 闻喜县| 咸宁市| 弥勒县| 奇台县| 布尔津县| 石台县| 平阳县| 汾西县| 康平县| 安泽县| 固安县| 伊宁市| 银川市| 汽车| 保亭| 清远市| 莱阳市| 台南县| 浦北县| 休宁县| 洪洞县| 威远县| 莲花县| 陆川县| 景宁|