1 回答
TA贡献1891条经验 获得超3个赞
方法 Put 的类型错误(有 func(item interface{}) *github.com/guregu/dynamo.Put,想要 func(item interface{}) interface{Run() error})
你的函数返回一个*Put. 该接口需要一个interface{Run() error}. A*Put可能满足这个接口,但它们仍然是不同的类型。 返回满足该接口的类型的函数签名不能与返回该接口的函数签名互换。
因此,首先为您的界面命名。我们在两个地方提到它,你应该避免匿名接口(和结构)定义,因为它们没有内在的好处,会让你的代码更冗长,更少 DRY。
type Runner interface{
Run() error
}
现在更新 DynamoTable 以使用该接口
type DynamoTable interface {
Put(item interface{}) Runner
}
你说dynamo.Table的是你无法控制的。但是您可以创建一个等于的新类型dynamo.Table,然后覆盖该put方法。
在重写的方法中,我们转换dynamoTable回dynamo.Table,调用原来的dynamo.Table.Put,然后返回结果。
type dynamoTable dynamo.Table
func (table *dynamoTable) Put(item interface{}) Runner {
return (*dynamo.Table)(table).Put(item)
}
dynamo.Table仍然可以返回一个*Put因为*Putimplements Runner。返回值将为Runner,基础类型将为*Put。然后接口将得到满足,错误将被修复。
https://go.dev/play/p/y9DKgwWbXOO说明了这个重新输入和覆盖过程是如何工作的。
- 1 回答
- 0 关注
- 105 浏览
添加回答
举报