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 關注
- 143 瀏覽
添加回答
舉報