30秒到達(dá)戰(zhàn)場
2022-10-24 16:30:06
我是一名 Go 新手,試圖覆蓋適用于 DynamoDB 的 AWS Go 開發(fā)工具包中的一些方法?;旧希蚁朐?DynamoDB 客戶端的某些方法中添加一些日志記錄。我擁有的代碼是:type dynamoDBLogger struct { dynamodb.DynamoDB}func (d *dynamoDBLogger) DeleteItemWithContext(ctx context.Context, item *dynamodb.DeleteItemInput) (*dynamodb.DeleteItemOutput, error) { logger.Debug("Deleting from DynamoDB: %+v", *item) return d.DynamoDB.DeleteItemWithContext(ctx, item)}換句話說,它只是在實際調(diào)用之前添加了一個日志記錄語句。此代碼編譯?,F(xiàn)在的問題是如何創(chuàng)建一個dynamoDBLogger?實例化 a 的唯一方法DynamoDB是使用方法:func New(...) *dynamodb.DynamoDB在dynamodb包中。我可以以某種方式使用它來構(gòu)建 a 的實例dynamoDBLogger嗎?不確定它是否會起作用,但我希望該*dynamoDbLogger類型可用作*dynamodb.DynamoDB.編輯:我實際上注意到以下失?。篺unc GetDynamoClient(sess *session.Session) *dynamodb.DynamoDB { svc := dynamoDBLogger{} svc.DynamoDB = *dynamodb.New(sess) return &svc}即類型系統(tǒng)不允許用 a*dynamodb.DynamoDB替換 a *dynamoDBLogger。我想知道 Go 的類型系統(tǒng)是否允許我想要完成的事情,因為dynamodb.DynamoDB不是接口?
1 回答

紅糖糍粑
TA貢獻(xiàn)1815條經(jīng)驗 獲得超6個贊
最好使用 dynamo db 接口。它提供了為測試創(chuàng)建模擬的可能性。例子:
package main
import (
"github.com/aws/aws-sdk-go/service/dynamodb/dynamodbiface"
)
type dynamoDBLogger struct {
DynamoDBAPI
}
func NewDynamoDB() dynamodbiface.DynamoDBAPI {
svc := &dynamoDBLogger{
DynamoDBAPI: dynamodb.New(sess),
}
return &svc
}
// in tests
type mockDB struct {
dynamodbiface.DynamoDBAPI
}
func NewMockDB() dynamodbiface.DynamoDBAPI {
}
在模擬中,您需要實現(xiàn)程序中實際使用的唯一方法。
完整示例在:https ://docs.aws.amazon.com/sdk-for-go/api/service/dynamodb/dynamodbiface/
- 1 回答
- 0 關(guān)注
- 133 瀏覽
添加回答
舉報
0/150
提交
取消