如何使用ioc,接口和实现

时间:2016-01-23 17:02:21

标签: go interface

我正试图找出GoLang中的接口。

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

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

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

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

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

1 个答案:

答案 0 :(得分: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不同的一个注意事项是Go中没有明确的implements关键字。它基于动态类型编程语言中熟悉的原则,而基本上是duck-typing。它隐含地知道接口是在编译时由struct实现的。

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