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

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

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

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

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

一、類型轉(zhuǎn)換

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

(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類型,所以該表達(dá)式直接編譯錯誤。將該表達(dá)式改為 (*int32)(var1)就可以正常輸出了。

二、類型斷言

(1)語法:

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

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

(2)類型斷言的本質(zhì),跟類型轉(zhuǎn)換類似,都是類型之間進(jìn)行轉(zhuǎn)換,不同之處在于,類型斷言實在接口之間進(jì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的第一個程序-Hello?World

    Golang的第一個程序-Hello?World

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

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

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

    Golang中Set類型的實現(xiàn)方法示例詳解

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

    Golang中的信號(Signal)機制詳解

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