为了账号安全,请及时绑定邮箱和手机立即绑定

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 关注
  • 181 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信