GO語(yǔ)言類(lèi)型轉(zhuǎn)換和類(lèi)型斷言實(shí)例分析
本文實(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)換的。如下:
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)型不兼容。注釋后,輸出如下:
float32->7
int64->7
值得注意的是,如果某些類(lèi)型可能引起誤會(huì),應(yīng)該用括號(hào)括起來(lái)轉(zhuǎn)換,如下:
//創(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)型斷言:
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)題了。輸出為:
以上是不安全的類(lèi)型斷言。我們來(lái)看一下安全的類(lèi)型斷言:
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ì)有所幫助。
- go語(yǔ)言實(shí)現(xiàn)字符串與其它類(lèi)型轉(zhuǎn)換(strconv包)
- Go語(yǔ)言類(lèi)型轉(zhuǎn)換及問(wèn)題探討
- Go語(yǔ)言類(lèi)型轉(zhuǎn)換的方式有哪些
- 詳解Go語(yǔ)言strconv與其他基本數(shù)據(jù)類(lèi)型轉(zhuǎn)換函數(shù)的使用
- 一文帶你了解Go語(yǔ)言中的類(lèi)型斷言和類(lèi)型轉(zhuǎn)換
- 詳解Go語(yǔ)言中的數(shù)據(jù)類(lèi)型及類(lèi)型轉(zhuǎn)換
- 手把手帶你走進(jìn)Go語(yǔ)言之類(lèi)型轉(zhuǎn)換
- Go語(yǔ)言基本類(lèi)型轉(zhuǎn)換的實(shí)現(xiàn)示例
相關(guān)文章
Go事務(wù)中止時(shí)是否真的結(jié)束事務(wù)解析
這篇文章主要為大家介紹了Go事務(wù)中止時(shí)是否真的結(jié)束事務(wù)實(shí)例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
Golang函數(shù)重試機(jī)制實(shí)現(xiàn)代碼
在編寫(xiě)應(yīng)用程序時(shí),有時(shí)候會(huì)遇到一些短暫的錯(cuò)誤,例如網(wǎng)絡(luò)請(qǐng)求、服務(wù)鏈接終端失敗等,這些錯(cuò)誤可能導(dǎo)致函數(shù)執(zhí)行失敗,這篇文章主要介紹了Golang函數(shù)重試機(jī)制實(shí)現(xiàn)代碼,需要的朋友可以參考下2024-04-04
Golang中HTTP服務(wù)的分析與設(shè)計(jì)詳解
這篇文章主要介紹了Golang中HTTP服務(wù)的分析與設(shè)計(jì),HTTP服務(wù)是實(shí)現(xiàn)Web應(yīng)用程序的重要組成部分,為了實(shí)現(xiàn)高效可擴(kuò)展的Web應(yīng)用程序,需要對(duì)HTTP服務(wù)進(jìn)行分析與設(shè)計(jì),需要的朋友可以參考下2023-05-05
Go語(yǔ)言基礎(chǔ)單元測(cè)試與性能測(cè)試示例詳解
Golang中Set類(lèi)型的實(shí)現(xiàn)方法示例詳解
Golang中的信號(hào)(Signal)機(jī)制詳解

