aws-sdk-go-v2 attributevalue.Marshaler接口失效问题求助
问题原因及解决方案
核心问题在于你的MarshalDynamoDBAttributeValue方法使用了指针接收器,但如果业务代码中传递的是ID值类型而非*ID指针类型,attributevalue包会直接走默认的反射序列化逻辑。由于ID结构体的value字段是小写未导出的,反射无法读取该字段值,最终导致数据库中存储为空对象。
解决方案
有两种方式可以解决这个问题:
使用指针类型替代值类型
在需要序列化的父结构体中,将ID类型改为*ID指针类型,确保触发你实现的自定义Marshaler方法:type MyData struct { ItemID *ID `dynamodbav:"item_id"` }为值类型实现Marshaler接口
新增一个值接收器的MarshalDynamoDBAttributeValue方法,这样无论是ID值类型还是*ID指针类型,都会触发自定义序列化逻辑:func (id ID) MarshalDynamoDBAttributeValue() (types.AttributeValue, error) { return &types.AttributeValueMemberS{Value: id.value}, nil }(指针类型会自动继承值类型的接口实现,所以无需删除原有的指针接收器方法)
内容的提问来源于stack exchange,提问作者elera
相关产品推荐
相关产品推荐

