Go語言編譯器自動檢測類型是否實現(xiàn)接口-創(chuàng)新互聯(lián)

本篇文章為大家展示了Go語言編譯器自動檢測類型是否實現(xiàn)接口,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

成都創(chuàng)新互聯(lián)自2013年創(chuàng)立以來,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務公司,擁有項目成都網(wǎng)站建設、成都網(wǎng)站制作網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元寧化做網(wǎng)站,已為上家服務,為寧化各地企業(yè)和個人服務,聯(lián)系電話:18982081108

編譯器自動檢測類型是否實現(xiàn)接口

經(jīng)??吹揭恍╅_源庫里會有一些類似下面這種奇怪的用法:

這時候會有點懵,不知道作者想要干什么,實際上這就是此問題的答案。編譯器會由此檢查*myWriter類型是否實現(xiàn)了io.Writer接口。

實際上,上述賦值語句會發(fā)生隱式地類型轉(zhuǎn)換,在轉(zhuǎn)換的過程中,編譯器會檢測等號右邊的類型是否實現(xiàn)了等號左邊接口所規(guī)定的函數(shù)。

接口的構(gòu)造過程是怎樣的

我們已經(jīng)看過了iface和eface的源碼,知道iface最重要的是itab和_type。

為了研究清楚接口是如何構(gòu)造的,接下來我會拿起匯編的武器,還原背后的真相。

把每個字段的大小相加,itab結(jié)構(gòu)體的大小就是40字節(jié)。上面那一串數(shù)字實際上是itab序列化后的內(nèi)容,注意到大部分數(shù)字是0,從24字節(jié)開始的4個字節(jié)da9f20d4實際上是itab的hash值,這在判斷兩個類型是否相同的時候會用到。

下面兩行是鏈接指令,簡單說就是將所有源文件綜合起來,給每個符號賦予一個全局的位置值。這里的意思也比較明確:前8個字節(jié)最終存儲的是type."".Person的地址,對應itab里的inter字段,表示接口類型;8-16字節(jié)最終存儲的是type."".Student的地址,對應itab里_type字段,表示具體類型。

第二個參數(shù)就比較簡單了,它就是數(shù)字18的地址,這也是初始化Student結(jié)構(gòu)體的時候會用到。

在main函數(shù)里,先構(gòu)造出一個接口對象qcrao,然后強制類型轉(zhuǎn)換,最后讀取出hash值,非常妙!你也可以自己動手試一下。

上述內(nèi)容就是Go語言編譯器自動檢測類型是否實現(xiàn)接口,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

當前標題:Go語言編譯器自動檢測類型是否實現(xiàn)接口-創(chuàng)新互聯(lián)
文章出自:http://bm7419.com/article22/hsdcc.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供電子商務、手機網(wǎng)站建設、全網(wǎng)營銷推廣關鍵詞優(yōu)化、App設計、App開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站