十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
本篇內(nèi)容介紹了“Go語言類型轉(zhuǎn)換和斷言的區(qū)別是什么”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
創(chuàng)新新互聯(lián),憑借10多年的成都網(wǎng)站設(shè)計、網(wǎng)站建設(shè)經(jīng)驗,本著真心·誠心服務(wù)的企業(yè)理念服務(wù)于成都中小企業(yè)設(shè)計網(wǎng)站有上1000家案例。做網(wǎng)站建設(shè),選創(chuàng)新互聯(lián)。
我們知道,Go語言中不允許隱式類型轉(zhuǎn)換,也就是說=兩邊,不允許出現(xiàn)類型不相同的變量。
類型轉(zhuǎn)換、類型斷言本質(zhì)都是把一個類型轉(zhuǎn)換成另外一個類型。不同之處在于,類型斷言是對接口變量進(jìn)行的操作。
類型轉(zhuǎn)換
對于類型轉(zhuǎn)換而言,轉(zhuǎn)換前后的兩個類型要相互兼容才行。類型轉(zhuǎn)換的語法為:
<結(jié)果類型>:=<目標(biāo)類型>(<表達(dá)式>)
斷言
前面說過,因為空接口interface{}沒有定義任何函數(shù),因此Go中所有類型都實現(xiàn)了空接口。當(dāng)一個函數(shù)的形參是interface{},那么在函數(shù)中,需要對形參進(jìn)行斷言,從而得到它的真實類型。
斷言的語法為:
//安全類型斷言
<目標(biāo)類型的值>,<布爾參數(shù)>:=<表達(dá)式>.(目標(biāo)類型)
//非安全類型斷言
<目標(biāo)類型的值>:=<表達(dá)式>.(目標(biāo)類型)
類型轉(zhuǎn)換和類型斷言有些相似,不同之處,在于類型斷言是對接口進(jìn)行的操作。
斷言其實還有另一種形式,就是用在利用switch語句判斷接口的類型。每一個case會被順序地考慮。當(dāng)命中一個case時,就會執(zhí)行case中的語句,因此case語句的順序是很重要的,因為很有可能會有多個case匹配的情況。
fmt.Println函數(shù)的參數(shù)是interface。對于內(nèi)置類型,函數(shù)內(nèi)部會用窮舉法,得出它的真實類型,然后轉(zhuǎn)換為字符串打印。而對于自定義類型,首先確定該類型是否實現(xiàn)了String()方法,如果實現(xiàn)了,則直接打印輸出String()方法的結(jié)果;否則,會通過反射來遍歷對象的成員進(jìn)行打印。
類型T只有接受者是T的方法;而類型*T擁有接受者是T和*T的方法。語法上T能直接調(diào)*T的方法僅僅是Go的語法糖。
所以,Student結(jié)構(gòu)體定義了接受者類型是值類型的String()方法時,通過
均可以按照自定義的格式來打印。
如果Student結(jié)構(gòu)體定義了接受者類型是指針類型的String()方法時,只有通過
才能按照自定義的格式打印。
“Go語言類型轉(zhuǎn)換和斷言的區(qū)別是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!