猿问

ioc、接口和实现如何工作

我正在尝试找出 GoLang 中的接口。

熟悉 Java 即接口中的所有工作原理,实现允许模拟和完整实现。我对如何在 Go 中将事物联系在一起感到有些困惑。

例如,我正在尝试实现AmazonProductAdvertisingAPI连接器。我已经创建了PAAPI接口和另一个提供实现的文件。

然后我有一个 struct config。然后,我创建与实现方法签名文件PAAPI和基于configconfig工具PAAPI

所有这些都发生在同一个包中。但是从外部的角度来看,我怎么能去实现一个模拟PAAPI,一切都在config结构上链接起来似乎很奇怪。

任何代码示例将不胜感激。谢谢。


慕容708150
浏览 182回答 1
1回答

牛魔王的故事

如果我正确理解你,你是说你的实现是耦合到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 interfacefunc DoSomethingWithInterface(config PAAPI) {    // do something}更进一步,如果在外部包中,您想实现接口只需定义另一个符合接口的结构。像下面这样:type ExternalConfig struct{}func (config *ExternalConfig) Foo() {    // do something}与 Java 不同的是,implementsGo 中没有显式关键字。它基于动态类型编程语言中的一个熟悉的原则,基本上是鸭子类型。它隐含地知道该接口是在编译时由结构实现的。基于前两段代码,现在您可以调用DoSomethingWithInterface(ExternalConfig{}). 请注意,我内联了ExternalConfig此处的实例,但您可以使用实际凭据创建它并DoSomethingWithInterface以相同的方式将其传递给它。希望这可以帮助。另外,如果我没有完全达到目标,请随时发表评论以询问清楚。
随时随地看视频慕课网APP

相关分类

Go
我要回答