Go的指針類型與接口

Go中的指針類型有一個約定:任一指針具有其地址指帶的實(shí)體(最常見的是結(jié)構(gòu)體,當(dāng)然也可以是字符串、數(shù)字或者其他指針等)的所有屬性、方法,這樣“智能”的設(shè)定下使得我們可以 *** f ***

使用類型B的實(shí)例b給接口類型A的變量a賦值時,根據(jù)B實(shí)現(xiàn)A中定義的方法的接收者類型的不同(指針還是值),b的類型(指針還是值)有一些約束:

1、接收者類型是指針:這種情況下方法可能存在副作用(可能導(dǎo)致對方法接收者的修改),而對于接口類型的變量,如果它的值的類型是“值”那么go無法從這個變量中獲取指針(原因比較深奧),這個值只是一個副本,那么上述的方法“副作用”是無法實(shí)現(xiàn)的,所以go認(rèn)為賦值給;

2、接收者類型是值:方法沒有副作用,方法內(nèi)的值是個實(shí)際值副本,所以b不論為指針還是實(shí)例,接收者方法都不會有副作用,這時go不會強(qiáng)行要求;

由于Go中沒有方法重載機(jī)制,所以以上同名方法只能存在一個。

另,要分清方法中的方法接收者和方法參數(shù),當(dāng)不討論接口類型的賦值時,定義方法時不論將接收聲明為指針還是實(shí)例,在調(diào)用方法時go都將自動將接收者轉(zhuǎn)換為合適的類型(是否有副作用得看方法內(nèi)部實(shí)現(xiàn));而方法參數(shù)的類型是嚴(yán)格規(guī)定好的,無法進(jìn)行轉(zhuǎn)換。

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

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

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,621評論 1 32
  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學(xué)習(xí)記錄文檔,今天18年5月份再次想寫文章,發(fā)現(xiàn)簡書還為我保存起的...
    Jenaral閱讀 3,115評論 2 9
  • 專業(yè)考題類型管理運(yùn)行工作負(fù)責(zé)人一般作業(yè)考題內(nèi)容選項(xiàng)A選項(xiàng)B選項(xiàng)C選項(xiàng)D選項(xiàng)E選項(xiàng)F正確答案 變電單選GYSZ本規(guī)程...
    小白兔去釣魚閱讀 10,469評論 0 13
  • __block和__weak修飾符的區(qū)別其實(shí)是挺明顯的:1.__block不管是ARC還是MRC模式下都可以使用,...
    LZM輪回閱讀 3,585評論 0 6
  • Lua 5.1 參考手冊 by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 14,235評論 0 38

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