在下面的代码中,我正在尝试创建Model接口和API接口的具体实现:
package main
import "fmt"
/////////
type Model interface {
ID() string
}
type API interface {
Create(Model)
}
/////////
type ConcreteModel struct {}
func (model ConcreteModel) ID() string {
return "123"
}
func (model ConcreteModel) Name() string {
return "aron"
}
type ConcreteAPI struct{}
func (api ConcreteAPI) Create(model ConcreteModel) {
fmt.Println("Created concrete model with id " + model.ID() + ", name " + model.Name())
}
func main() {
// invocation via interface
func(api API) {
api.Create(ConcreteModel{})
}(ConcreteAPI{})
}
对我来说完全混淆是运行此代码时出现以下错误的原因:
ConcreteAPI does not implement API (wrong type for Create method)
have Create(ConcreteModel)
want Create(Model)
从我收集的关于golang ducktyping的内容来看,似乎ConcreteAPI应该履行Create(Model)的契约,因为ConcreteModel
具有Model
所需的方法,即ID() string
。
我想尝试做类似这样的事情的原因是func(api API)
是知道如何在我的预期真实代码库中使用具体API实现的东西的替身。
有没有人就如何制作上述实际工作提出建议?
答案 0 :(得分:0)
ConcreteAPI没有实现API的方法,请添加:
func(concreteApi * ConcreteAPI)创建(模型){}
但您有其他错误,请参阅以下详细信息: ConcreteModel也不实现Model