Amazon 有一篇非常有用的文章,描述了如何对AWS SDK Go v2 进行单元测试。我理解他们放弃 v1 API 单元测试的“旧”方式的动机,我认为这与CodeReviewComment一致。
然而,我遇到了一种对我造成严重破坏的情况。
假设我正在打电话s3.HeadObject(),如果满足某些任意条件,我就会打电话s3.GetObject()。因此,我设计了我的 API,以便我可以分别为每个操作创建客户端 API(在pseudoGo 中)。
type HeadObjectAPIClient interface {
HeadObject(ctx context.Context, params *s3.HeadObjectInput, optFns ...func(*s3.Options)) (*s3.HeadObjectOutput, error)
}
func GetHeadObject(api HeadObjectAPIClient, params...) (*s3.HeadObjectOutput, error) {
/* setup logic */
return api.HeadObject( /* params */ )
}
type GetObjectAPIClient interface {
GetObject(ctx context.Context, params *s3.GetObjectInput, optFns ...func(*s3.Options)) (*s3.GetObjectOutput, error)
}
func GetObject(api GetObjectAPIClient, params...) (*s3.GetObjectOutput, error) {
/* setup logic */
return api.GetObject( /* …Run Code Online (Sandbox Code Playgroud) 使用 SDK v1,我可以使用 logrus 作为我的自定义记录器,例如:
Logger: aws.LoggerFunc(func(args ...interface{}) {
log.WithField("process", "s3").Debug(args...)
}),
Run Code Online (Sandbox Code Playgroud)
sdk v2 对此有所改变,https://aws.github.io/aws-sdk-go-v2/docs/configuring-sdk/logging/
看来我需要按照https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/config#WithLogger使用logging.logger
我很难使用 logrus 来达到此目的,有人可以建议我在这里需要做什么吗?
我正在尝试转换简单的 DynamoDB 对象字符串:
{
"Item": {
"Id": {
"S": "db31"
},
"CreateTime": {
"N": "1647882237618915000"
}
}
Run Code Online (Sandbox Code Playgroud)
到任一dynamodb.AttributeValue映射到 go 对象(go 类型结构)或转换为简单的 JSON go 对象。