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

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

高浪包接口

高浪包接口

Go
有只小跳蛙 2022-09-26 14:50:05
我對(duì)golang有點(diǎn)陌生,我有一個(gè)關(guān)于包和接口的問題。如果我有packue1,它需要使用一個(gè)接口的實(shí)現(xiàn),將來可以與其他實(shí)現(xiàn)交換,這可能嗎?一些偽代碼包實(shí)現(xiàn)包含接口的當(dāng)前實(shí)現(xiàn)type TestI interface {   M1()}package implementationtype Impl struct {}funct (i *Impl) M1 ( ... do something )package package1import TestI somehow and call M1 method but with flexibility to swap it with other implementation of this interface in future?包包1應(yīng)該在不知道的情況下使用實(shí)現(xiàn)(就像c#或java中的DI一樣,包應(yīng)該只知道接口,而不知道實(shí)現(xiàn))TestI接口應(yīng)該在哪里定義?抱歉,如果這有點(diǎn)令人困惑,只是想讓我的頭腦繞過它。這在 c 中是等效的#ITest {  SetClass(Class1 cl);}// package1class Class1 {  private ITest test {get; set;}  public void SomeMethod() {// i want to somehow set this in other package    test.SetClass(this);  }}// package2class Test implements ITest { private Class1 cl;SetClass(Class1 c) { this.c1 = c;}}
查看完整描述

1 回答

?
SMILET

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

除非您正在編寫接口優(yōu)先的應(yīng)用程序,否則通常最好在不聲明任何接口的情況下編寫具體實(shí)現(xiàn)。然后,該包的用戶可以聲明必要的接口。例如:


type Implementation struct {

   ...

}


func (i Implementation) FuncA() {...}

func (i Implementation) FuncB() {...}

如果需要實(shí)現(xiàn)的某個(gè)類型,則可以聲明:FuncA


type IntfA interface {

   FuncA()

}

具有該方法的任何類型都實(shí)現(xiàn) ,并且符合該說明,因此您可以將 的實(shí)例傳遞給需要 的函數(shù)。FuncAIntfAImplementationImplementationIntfA


同樣,如果您需要一個(gè)同時(shí)包含 和 的接口,則可以聲明:FuncAFuncB


type IntfAB interface {

   FuncA()

   FuncB()

}

并實(shí)現(xiàn) .ImplementationIntfAB


因此,理想情況下,您將在使用它的位置聲明所需的接口,并且具有一組匹配方法的任何類型都可用于該接口的實(shí)現(xiàn)。


如果您基于現(xiàn)有接口編寫,則可以將該接口放在與實(shí)現(xiàn)不同的包中,或者可以將接口和實(shí)現(xiàn)保留在同一包中,以對(duì)您的用例更有意義為準(zhǔn)。


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

添加回答

舉報(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)