欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

一、類(lèi)型轉(zhuǎn)換

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

(2)、類(lèi)型轉(zhuǎn)換是用來(lái)在不同但相互兼容的類(lèi)型之間的相互轉(zhuǎn)換的方式,所以,當(dāng)類(lèi)型不兼容的時(shí)候,是無(wú)法轉(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)轭?lèi)型不兼容。注釋后,輸出如下:

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

值得注意的是,如果某些類(lèi)型可能引起誤會(huì),應(yīng)該用括號(hào)括起來(lái)轉(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類(lèi)型,所以該表達(dá)式直接編譯錯(cuò)誤。將該表達(dá)式改為 (*int32)(var1)就可以正常輸出了。

二、類(lèi)型斷言

(1)語(yǔ)法:

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

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

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

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

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

改一下,把 i 的定義改為:var i interface{} = 99,就沒(méi)問(wèn)題了。輸出為:

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

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

輸出“類(lèi)型不匹配”。

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

相關(guān)文章

  • Golang的第一個(gè)程序-Hello?World

    Golang的第一個(gè)程序-Hello?World

    這篇文章主要介紹了第一個(gè)Go程序-Hello?World,在編寫(xiě)第一個(gè)go程序之前,我們要將系統(tǒng)的環(huán)境變量配好,下面來(lái)看具體的編一過(guò)程吧,需要的小伙伴可以參考一下
    2022-01-01
  • Go語(yǔ)言基礎(chǔ)單元測(cè)試與性能測(cè)試示例詳解

    Go語(yǔ)言基礎(chǔ)單元測(cè)試與性能測(cè)試示例詳解

    這篇文章主要為大家介紹了Go語(yǔ)言基礎(chǔ)單元測(cè)試與性能測(cè)試示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助祝大家多多進(jìn)步
    2021-11-11
  • Golang中Set類(lèi)型的實(shí)現(xiàn)方法示例詳解

    Golang中Set類(lèi)型的實(shí)現(xiàn)方法示例詳解

    這篇文章主要給大家介紹了關(guān)于Golang中Set類(lèi)型實(shí)現(xiàn)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • Golang中的信號(hào)(Signal)機(jī)制詳解

    Golang中的信號(hào)(Signal)機(jī)制詳解

    Signal 是一種操作系統(tǒng)級(jí)別的事件通知機(jī)制,進(jìn)程可以響應(yīng)特定的系統(tǒng)信號(hào),這些信號(hào)用于指示進(jìn)程執(zhí)行特定的操作,如程序終止、掛起、恢復(fù)等,Golang 的標(biāo)準(zhǔn)庫(kù) os/signal 提供了對(duì)信號(hào)處理的支持,本文將詳細(xì)講解 Golang 是如何處理和響應(yīng)系統(tǒng)信號(hào)的,需要的朋友可以參考下
    2024-01-01
  • 最新評(píng)論