2016-01-23 77 views
0

我想弄清楚GoLang中的接口。ioc,接口和实现如何工作

熟悉如何在Java中工作,即接口,实现允许模拟和完整的实现。我有点困惑于我如何在Go中将事情联系在一起。

例如,我试图实现AmazonProductAdvertisingAPI连接器。我已经创建了PAAPI接口以及另一个提供实现的文件。

然后我有一个结构config。然后我创建了一个具有方法签名的文件,该文件实现了PAAPI并且基于config,即config实现了PAAPI

所有发生在同一个包中。但是从外部的角度来看,我该如何去实现PAAPI的模拟,看起来奇怪的是,所有的东西都在config结构上链接起来。

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

+1

我不太清楚你在问什么。你能详细说明你的问题吗?也许添加一些代码? – Riscie

+0

不要在Go中编程Java。启动混凝土(不带接口)。适当时提取界面。看看stdlib是如何做的。 – Volker

回答

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 interface 
func DoSomethingWithInterface(config PAAPI) { 
    // do something 
} 

把它另一步,如果在外部包,要实现接口简单地定义另一个结构是符合接口。就像下面:

type ExternalConfig struct{} 

func (config *ExternalConfig) Foo() { 
    // do something 
} 

关于这一点,从Java不同的几个注意事项是,有围棋中没有明确implements关键字。它基于动态类型编程语言中的熟悉原则,基本上是duck-typing。它隐含地知道接口在编译时由struct实现。

基于前面两段代码,现在您可以拨打DoSomethingWithInterface(ExternalConfig{})。请注意,我在此处插入了ExternalConfig的实例,但您可以使用实际凭据创建它,并以相同的方式将它传递到DoSomethingWithInterface。希望这可以帮助。此外,如果我没有达到目标,请随时发表评论,要求澄清。