为了账号安全,请及时绑定邮箱和手机立即绑定

Golang 中 DynamoDB 索引键的空字符串

Golang 中 DynamoDB 索引键的空字符串

Go
慕码人2483693 2022-10-10 19:31:58
在与 DynamoDB 通信时,我一直在使用 Protobuf 进行对象定义。到目前为止,这些对象看起来像这样:type Record struct {    state         protoimpl.MessageState    sizeCache     protoimpl.SizeCache    unknownFields protoimpl.UnknownFields    Id               string        `protobuf:"bytes,2,opt,name=id,json=id,proto3" dynamodbav:"id,omitempty" json:"id,omitempty"`    Name             string        `protobuf:"bytes,3,opt,name=name,json=name,proto3" dynamodbav:"name,omitempty" json:"name,omitempty"`    OrgId            string        `protobuf:"bytes,4,opt,name=org_id,json=orgId,proto3" dynamodbav:"org_id,omitempty" json:"org_id,omitempty"`    AccountId        string        `protobuf:"bytes,7,opt,name=account_id,json=accountId,proto3" dynamodbav:"account_id,omitempty" json:"account_id,omitempty"`    Address          string        `protobuf:"bytes,9,opt,name=address,proto3" dynamodbav:"address,omitempty" json:"address,omitempty"`    BillingTitle     string        `protobuf:"bytes,10,opt,name=billing_title,json=billingTitle,proto3" dynamodbav:"billing_title,omitempty" json:"billing_title,omitempty"`}这段代码不会惊慌,我会看到 DynamoDB 中的值。但是,omitempty从所有标签中删除该子句后dynamodbav,我注意到现在失败并出现以下错误:ValidationException: Invalid attribute value type        status code: 400, request id: 6a626232-fcd4-4999-afe4-3df5769ce1b2我想使用默认值而不是前者,NULL: true但我没有看到任何序列化选项。有没有办法在不实现 DynamoDB 封送器接口的情况下做到这一点?
查看完整描述

1 回答

?
郎朗坤

TA贡献1921条经验 获得超9个赞

经过一番调查,我在这里Marshal找到了该函数的源代码。据此,我可以设置一个名为的字段来告诉编码器我希望将空字符串作为字符串发送,而不是作为空属性发送。但是,如果我设置它,我不能直接使用, 。所以,我复制了它们并写了我自己的:NullEmptyStringMarshalMarshalMapMarshalList


func MarshalMap(in interface{}) (map[string]*dynamodb.AttributeValue, error) {

    av, err := getEncoder().Encode(in)

    if err != nil || av == nil || av.M == nil {

        return map[string]*dynamodb.AttributeValue{}, err

    }


    return av.M, nil

}


func getEncoder() *dynamodbattribute.Encoder {

    encoder := dynamodbattribute.NewEncoder()

    encoder.NullEmptyString = false

    return encoder

}


查看完整回答
反对 回复 2022-10-10
  • 1 回答
  • 0 关注
  • 80 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号