第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

在結(jié)構(gòu)中匿名/顯式嵌入接口

在結(jié)構(gòu)中匿名/顯式嵌入接口

Go
忽然笑 2022-06-21 16:48:04
type A interface {    f()}type B struct {    A}type C struct {    Imp A}func main() {    b := B{}    c := C{}    //b can be directly assigned to the A interface, but c prompts that it cannot be assigned    var ab A = b    //Cannot use 'c' (type C) as type A in assignment Type does not implement 'A' as some methods are missing: f()     var ac A = c}B結(jié)構(gòu)和C結(jié)構(gòu)有什么區(qū)別?在 Go 表中使用類型聲明但沒(méi)有顯式字段名稱的字段稱為嵌入字段。嵌入字段必須指定為類型名稱 T 或指向非接口類型名稱 *T 的指針,并且 T 本身可能不是指針類型。非限定類型名稱充當(dāng)字段名稱。
查看完整描述

1 回答

?
慕尼黑8549860

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超11個(gè)贊

如果您繼續(xù)閱讀規(guī)范的同一部分,您會(huì)注意到以下內(nèi)容:

給定一個(gè)結(jié)構(gòu)類型 S 和一個(gè)定義類型 T,提升的方法包含在結(jié)構(gòu)的方法集中,如下所示:

  • 如果 S 包含嵌入字段 T,則 S 和 *S 的方法集都包含帶有接收者 T 的提升方法。*S 的方法集還包括帶有接收者 *T 的提升方法。

  • 如果 S 包含嵌入字段 *T,則 S 和 *S 的方法集都包含帶有接收器 T 或 *T 的提升方法。

您的結(jié)構(gòu)B沒(méi)有明確定義的方法,但B的方法集隱含地包括來(lái)自嵌入字段的提升方法。在這種情況下,嵌入字段是一個(gè)帶有方法的接口f()。您可以使用任何滿足該接口的對(duì)象,并且它的f()方法將自動(dòng)成為為B.

另一方面,您的C結(jié)構(gòu)有一個(gè)命名字段。上的方法Imp不會(huì)自動(dòng)添加到C方法集中。相反,要從 訪問(wèn)f()方法Imp,您需要專門(mén)調(diào)用C.Imp.f().

最后:您使用接口作為(嵌入或不嵌入)字段這一事實(shí)并不重要,它很容易成為另一個(gè)具有f()方法的結(jié)構(gòu)。重要的部分是是否f()成為父結(jié)構(gòu)的方法集的一部分,這將允許它實(shí)現(xiàn)A與否。


查看完整回答
反對(duì) 回復(fù) 2022-06-21
  • 1 回答
  • 0 關(guān)注
  • 111 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)