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以相同的方式将其传递给它。希望这可以帮助。另外,如果我没有完全达到目标,请随时发表评论以询问清楚。
- 1 回答
- 0 关注
- 181 浏览
添加回答
举报