亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

ioc、接口和實現如何工作

ioc、接口和實現如何工作

Go
慕容708150 2021-12-07 15:13:31
我正在嘗試找出 GoLang 中的接口。熟悉 Java 即接口中的所有工作原理,實現允許模擬和完整實現。我對如何在 Go 中將事物聯系在一起感到有些困惑。例如,我正在嘗試實現AmazonProductAdvertisingAPI連接器。我已經創建了PAAPI接口和另一個提供實現的文件。然后我有一個 struct config。然后,我創建與實現方法簽名文件PAAPI和基于config即config工具PAAPI。所有這些都發生在同一個包中。但是從外部的角度來看,我怎么能去實現一個模擬PAAPI,一切都在config結構上鏈接起來似乎很奇怪。任何代碼示例將不勝感激。謝謝。
查看完整描述

1 回答

?
牛魔王的故事

TA貢獻1830條經驗 獲得超3個贊

如果我正確理解你,你是說你的實現是耦合到config結構而不是接口。如果是這種情況,只需將使用 的參數替換config為接口,在本例中為PAAPI。


在下面的代碼中,DoSomethingWithStruct您想要的可能不是函數定義,而是DoSomethingWithInterface函數定義。


type PAAPI interface {

    Foo() // just a stub method

}


type Config struct {}


func (config *Config) Foo() {

    // do something

}


func DoSomethingWithStruct(config Config) {

    // do something

}


// you probably want a method that uses your config through the interface

func DoSomethingWithInterface(config PAAPI) {

    // do something

}

更進一步,如果在外部包中,您想實現接口只需定義另一個符合接口的結構。像下面這樣:


type ExternalConfig struct{}


func (config *ExternalConfig) Foo() {

    // do something

}

與 Java 不同的是,implementsGo 中沒有顯式關鍵字。它基于動態類型編程語言中的一個熟悉的原則,基本上是鴨子類型。它隱含地知道該接口是在編譯時由結構實現的。


基于前兩段代碼,現在您可以調用DoSomethingWithInterface(ExternalConfig{}). 請注意,我內聯了ExternalConfig此處的實例,但您可以使用實際憑據創建它并DoSomethingWithInterface以相同的方式將其傳遞給它。希望這可以幫助。另外,如果我沒有完全達到目標,請隨時發表評論以詢問清楚。


查看完整回答
反對 回復 2021-12-07
  • 1 回答
  • 0 關注
  • 212 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號