如果我正确地理解了你,你说你的实现是耦合到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
。希望这可以帮助。此外,如果我没有达到目标,请随时发表评论,要求澄清。
我不太清楚你在问什么。你能详细说明你的问题吗?也许添加一些代码? – Riscie
不要在Go中编程Java。启动混凝土(不带接口)。适当时提取界面。看看stdlib是如何做的。 – Volker