Go語(yǔ)言中iface和eface的區(qū)別有什么

本篇文章為大家展示了Go語(yǔ)言中iface和eface的區(qū)別有什么,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

創(chuàng)新互聯(lián)憑借在網(wǎng)站建設(shè)、網(wǎng)站推廣領(lǐng)域領(lǐng)先的技術(shù)能力和多年的行業(yè)經(jīng)驗(yàn),為客戶提供超值的營(yíng)銷型網(wǎng)站建設(shè)服務(wù),我們始終認(rèn)為:好的營(yíng)銷型網(wǎng)站就是好的業(yè)務(wù)員。我們已成功為企業(yè)單位、個(gè)人等客戶提供了網(wǎng)站制作、成都網(wǎng)站建設(shè)服務(wù),以良好的商業(yè)信譽(yù),完善的服務(wù)及深厚的技術(shù)力量處于同行領(lǐng)先地位。

iface和eface的區(qū)別是什么

iface和eface都是Go中描述接口的底層結(jié)構(gòu)體,區(qū)別在于iface描述的接口包含方法,而eface則是不包含任何方法的空接口:interface{}。

iface內(nèi)部維護(hù)兩個(gè)指針,tab指向一個(gè)itab實(shí)體,它表示接口的類型以及賦給這個(gè)接口的實(shí)體類型。data則指向接口具體的值,一般而言是一個(gè)指向堆內(nèi)存的指針。

再來(lái)仔細(xì)看一下itab結(jié)構(gòu)體:_type字段描述了實(shí)體的類型,包括內(nèi)存對(duì)齊方式,大小等;inter字段則描述了接口的類型。fun字段放置和接口方法對(duì)應(yīng)的具體數(shù)據(jù)類型的方法地址,實(shí)現(xiàn)接口調(diào)用方法的動(dòng)態(tài)分派,一般在每次給接口賦值發(fā)生轉(zhuǎn)換時(shí)會(huì)更新此表,或者直接拿緩存的itab。

這里只會(huì)列出實(shí)體類型和接口相關(guān)的方法,實(shí)體類型的其他方法并不會(huì)出現(xiàn)在這里。如果你學(xué)過(guò)C++的話,這里可以類比虛函數(shù)的概念。

另外,你可能會(huì)覺(jué)得奇怪,為什么fun數(shù)組的大小為1,要是接口定義了多個(gè)方法可怎么辦?實(shí)際上,這里存儲(chǔ)的是第一個(gè)方法的函數(shù)指針,如果有更多的方法,在它之后的內(nèi)存空間里繼續(xù)存儲(chǔ)。從匯編角度來(lái)看,通過(guò)增加地址就能獲取到這些函數(shù)指針,沒(méi)什么影響。順便提一句,這些方法是按照函數(shù)名稱的字典序進(jìn)行排列的。

再看一下interfacetype類型,它描述的是接口的類型:

可以看到,它包裝了_type類型,_type實(shí)際上是描述Go語(yǔ)言中各種數(shù)據(jù)類型的結(jié)構(gòu)體。我們注意到,這里還包含一個(gè)mhdr字段,表示接口所定義的函數(shù)列表,pkgpath記錄定義了接口的包名。

相比iface,eface就比較簡(jiǎn)單了。只維護(hù)了一個(gè)_type字段,表示空接口所承載的具體的實(shí)體類型。data描述了具體的值。

Go語(yǔ)言各種數(shù)據(jù)類型都是在_type字段的基礎(chǔ)上,增加一些額外的字段來(lái)進(jìn)行管理的:

type chantype struct {typ _typeelem *_typedir uintptr}

type slicetype struct {typ _typeelem *_type}

type structtype struct {typ _typepkgPath namefields []structfield}

這些數(shù)據(jù)類型的結(jié)構(gòu)體定義,是反射實(shí)現(xiàn)的基礎(chǔ)。

上述內(nèi)容就是Go語(yǔ)言中iface和eface的區(qū)別有什么,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

名稱欄目:Go語(yǔ)言中iface和eface的區(qū)別有什么
網(wǎng)頁(yè)路徑:http://bm7419.com/article4/gegsoe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、商城網(wǎng)站、動(dòng)態(tài)網(wǎng)站定制開(kāi)發(fā)、靜態(tài)網(wǎng)站、響應(yīng)式網(wǎng)站

廣告

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

手機(jī)網(wǎng)站建設(shè)