go 接口

精髓

《go語言實(shí)戰(zhàn)》5.4.3方法集。要理解方法集的含義!方法集與接口密切相關(guān)。


代碼清單 5-42 展示了規(guī)范里對(duì)方法集的描述。描述中說到,T 類型的值的方法集只包含值
接收者聲明的方法。而指向 T 類型的指針的方法集既包含值接收者聲明的方法,也包含指針接收
者聲明的方法
。從值的角度看這些規(guī)則,會(huì)顯得很復(fù)雜。讓我們從接收者的角度來看一下這些規(guī)
則,如代碼清單 5-43 所示。

代碼清單 5-43 展示了同樣的規(guī)則,只不過換成了接收者的視角。這個(gè)規(guī)則說,如果使用指
針接收者來實(shí)現(xiàn)一個(gè)接口,那么只有指向那個(gè)類型的指針才能夠?qū)崿F(xiàn)對(duì)應(yīng)的接口。如果使用值
接收者來實(shí)現(xiàn)一個(gè)接口,那么那個(gè)類型的值和指針都能夠?qū)崿F(xiàn)對(duì)應(yīng)的接口。

存儲(chǔ)實(shí)現(xiàn)

接口值是一個(gè)兩個(gè)字長(zhǎng)度
的數(shù)據(jù)結(jié)構(gòu),第一個(gè)字包含一個(gè)指向內(nèi)部表的指針。這個(gè)內(nèi)部表叫作 iTable,包含了所存儲(chǔ)的
值的類型信息。iTable 包含了已存儲(chǔ)的值的類型信息以及與這個(gè)值相關(guān)聯(lián)的一組方法。第二個(gè)
字是一個(gè)指向所存儲(chǔ)值的指針。將類型信息和指針組合在一起,就將這兩個(gè)值組成了一種特殊
的關(guān)系。


圖 5-2 展示了一個(gè)指針賦值給接口之后發(fā)生的變化。在這種情況里,類型信息會(huì)存儲(chǔ)一個(gè)指
向保存的類型的指針,而接口值第二個(gè)字依舊保存指向?qū)嶓w值的指針。


另外

沒理解下面這句話:

因?yàn)椴皇强偰塬@取一個(gè)值的地址,所以值的方法集只包括了使用值接收者實(shí)現(xiàn)的方法。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容