我正试图找出GoLang中的接口。
熟悉它在Java中的工作原理,即接口,实现允许模拟和完整实现。我对如何在Go中将事物联系在一起感到困惑。
例如,我正在尝试实现AmazonProductAdvertisingAPI
连接器。我创建了PAAPI
接口以及另一个提供实现的文件。
然后我有一个结构config
。然后,我创建了一个包含实现PAAPI
的方法签名的文件,该文件基于config
,即config
实现PAAPI
。
所有这些都发生在同一个包中。但是从外部的角度来看,我怎么能去实现PAAPI
的模拟,看起来很奇怪,所有内容都链接在config
结构上。
任何代码示例都将不胜感激。感谢。
答案 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
。希望这可以帮助。此外,如果我没有达到目标,请随时发表评论,要求明确。