go 接口賦值和相等 需要注意的地方

第一個接口:
package one

type ReadWriter interface { Read(buf []byte) (n int, err error)
Write(buf []byte) (n int, err error)
}
第二個接口位于另一個包中:
package two

type IStream interface { Write(buf []byte) (n int, err error)
Read(buf []byte) (n int, err error) }

在Go語言中,這兩個接口實際上并無區(qū)別,因為: ? 任何實現(xiàn)了one.ReadWriter接口的類,均實現(xiàn)了two.IStream; ? 任何one.ReadWriter接口對象可賦值給two.IStream,反之亦然; ? 在任何地方使用one.ReadWriter接口與使用two.IStream并無差異

以下這些代碼可編譯通過:
var file1 two.IStream = new(File)
var file2 one.ReadWriter = file1
var file3 two.IStream = file2

接口賦值并不要求兩個接口必須等價。如果接口A的方法列表是接口B的方法列表的子集, 那么接口B可以賦值給接口A。例如,假設(shè)我們有Writer接口:
type Writer interface { Write(buf []byte) (n int, err error) }
就可以將上面的one.ReadWriter和two.IStream接口的實例賦值給Writer接口:
var file1 two.IStream = new(File)
var file4 Writer = file1
但是反過來并不成立:
var file1 Writer = new(File)
var file5 two.IStream = file1
// 編譯不能通過 這段代碼無法編譯通過,原因是顯然的:file1并沒有Read()方法。

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

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

  • Lua 5.1 參考手冊 by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 14,257評論 0 38
  • 德國詩人荷爾德林曾說:“充滿勞績,然而人詩意地棲居在大地上。”我想這不僅是物質(zhì)生活的詩情畫意,更應(yīng)該是內(nèi)心的...
    佛頭夜雨閱讀 4,683評論 3 6
  • 今天有3個是綁帶美人,剩下兩個就是充數(shù)的→_→
    州芷明淵閱讀 316評論 0 3
  • 作者:玫琳凱精英執(zhí)行經(jīng)銷商趙井香 微信號:15951919907 美的定義:其實就是年輕! 在亞洲“母女像姐妹”是...
    趙井香閱讀 2,149評論 0 0
  • 悠揚的音樂聲響起,又到了下午的下班時間,匆匆收拾一下凌亂的桌面,起身,下樓。記不清已經(jīng)連續(xù)多少天沒有準(zhǔn)時下...
    涓涓細流39閱讀 317評論 1 3

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