国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Golang > 正文

GO語言類型轉換和類型斷言實例分析

2020-04-01 19:22:23
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了GO語言類型轉換和類型斷言,以實例形式詳細分析了類型轉換和類型斷言的概念與使用技巧,需要的朋友可以參考下
 

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

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

一、類型轉換

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

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

復制代碼代碼如下:
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處運行會報錯。因為類型不兼容。注釋后,輸出如下:

復制代碼代碼如下:
int->7
float32->7
int64->7

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

 

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

二、類型斷言

(1)語法:

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

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

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

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

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

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

 

現在把這個 i 轉換成 int 類型,系統內部檢測到這種不匹配,就會調用內置的panic()函數,拋出一個異常。

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

復制代碼代碼如下:
int->99

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

 

輸出“類型不匹配”。

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大庆市| 龙口市| 永平县| 永善县| 中西区| 昆山市| 榕江县| 佳木斯市| 嘉峪关市| 罗源县| 宿松县| 玛沁县| 青海省| 平潭县| 阿克| 新巴尔虎右旗| 平遥县| 临湘市| 东宁县| 桑植县| 宝坻区| 东莞市| 南投县| 咸丰县| 富锦市| 昆山市| 睢宁县| 塔城市| 桦甸市| 寿光市| 如东县| 玛纳斯县| 山东| 资中县| 黄山市| 仪陇县| 万山特区| 安庆市| 长沙市| 安溪县| 孝义市|