4 回答

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超4個(gè)贊
是的,z實(shí)現(xiàn)了x和y。您可以通過使用變量聲明將具體類型分配給接口類型來證明:
var _ x = z{}
var _ y = z{}
這為您提供了編譯時(shí)檢查,以確保類型實(shí)現(xiàn)了您想要的接口。
作為旁注,如果您明確想y成為x + some more methods,那么這樣寫是有意義的:
interface y {
x
b()
}
關(guān)于命名,如果一個(gè)類型實(shí)現(xiàn)了兩個(gè)共享某些方法的不同接口,我會(huì)這樣稱呼它——一個(gè)實(shí)現(xiàn)兩個(gè)不同接口的類型。一個(gè)接口是另一個(gè)接口的子集并不重要。
此外,在 Go 中,類型(以及非結(jié)構(gòu)類型)在定義時(shí)不與接口相關(guān)聯(lián)。即使一個(gè)類型不是為了實(shí)現(xiàn)某個(gè)接口而編寫的,您也可以通過定義具有不同名稱和/或該類型的不同方法組合的新接口來使其實(shí)現(xiàn)任意數(shù)量的接口。這使得為概念命名變得更加困難——當(dāng)接口稍后可能在另一個(gè)包中定義時(shí),您如何在類型定義時(shí)知道名稱?

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超4個(gè)贊
一開始我很難掌握 Go 接口的竅門。我有多年的 Java、C++、Python 經(jīng)驗(yàn)……恕我直言,充分利用 Go 和任何其他新語言的最佳方法是不要用 Go 語法編寫 Java 或 C++。了解 Go 中的事物是如何工作的并使用它。術(shù)語可能不是精確的一對(duì)一映射,但這無關(guān)緊要。
將 Go 接口視為一組對(duì)某些數(shù)據(jù)組(結(jié)構(gòu))進(jìn)行操作的方法簽名。 類似于Java 接口只是類上的一組方法簽名。主要區(qū)別在于,在 Go 中,你不需要指定結(jié)構(gòu)implements
接口,語言會(huì)為你做。如果您在結(jié)構(gòu)上指定方法,它會(huì)自動(dòng)實(shí)現(xiàn)接口。

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超6個(gè)贊
您說 z 實(shí)現(xiàn)了這兩個(gè)接口是正確的。
接口本身是一個(gè)通用的編程概念,并不局限于面向?qū)ο蟮恼Z言。一些面向?qū)ο蟮恼Z言(如 Java 和 Go)提供了一種定義和實(shí)現(xiàn)接口的方法,而其他語言則沒有。
它實(shí)際上是一種多態(tài)性,因?yàn)槟f的是一組特定的函數(shù)或方法可能由不同的數(shù)據(jù)結(jié)構(gòu)類型實(shí)現(xiàn)。正如維基百科文章所建議的那樣。它也可以被認(rèn)為是類型抽象。
Go 能夠支持面向?qū)ο蠛兔嫦蜻^程的編程風(fēng)格。它被認(rèn)為是一種面向?qū)ο蟮木幊陶Z言。
Go 是一種強(qiáng)類型語言,接口允許 Go 程序員通過他們的方法定義類型,以及通過數(shù)據(jù)結(jié)構(gòu)定義類型的其他方式。

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超8個(gè)贊
Go 中沒有繼承的概念。它促進(jìn)了組合而不是繼承。
來自 Go 常見問題解答:
沒有類型層次結(jié)構(gòu):類型就是這樣,它們不必聲明它們的關(guān)系。這些簡化使 Go 既具有表現(xiàn)力又易于理解,而不會(huì)犧牲復(fù)雜性。
- 4 回答
- 0 關(guān)注
- 169 瀏覽
添加回答
舉報(bào)