使用 golang 将“enum”编组/解组到 DynamoDB

我在 go 中有以下PartnerType“enum”结构:


// PartnerType enum

type PartnerType int


const (

    // PartnerTypeUnknown should never happen

    PartnerTypeUnknown PartnerType = iota


    // PartnerTypeTest test

    PartnerTypeTest

)


func (t PartnerType) String() string {

    names := [...]string{

        "UNKNOWN",

        "TEST"}


    if t < PartnerTypeUnknown || t > PartnerTypeTest {

        return names[0]

    }

    return names[t]

}


// MarshalJSON for enum

func (t PartnerType) MarshalJSON() ([]byte, error) {

    s := t.String()

    return json.Marshal(s)

}


// UnmarshalJSON for enum

func (t *PartnerType) UnmarshalJSON(b []byte) error {

    *t = PartnerTypeUnknown

    return nil

}


// MarshalText implements the text marshaller method

func (t *PartnerType) MarshalText() ([]byte, error) {

    return []byte(t.String()), nil

}


// UnmarshalText implements the text unmarshaller method

func (t *PartnerType) UnmarshalText(text []byte) error {

    *t = PartnerTypeUnknown

    return nil

}


// Partner entity

type Partner struct {

    ID   string `dynamodbav:"PK,omitempty"`

    Foo string `dynamodbav:"SK,omitempty"`

    PartnerType              PartnerType    `dynamodbav:",omitempty,string"`

}

在执行 a 时,dynamodbattribute.MarshalMap()我希望PartnerType将 my 存储为字符串。dynamodbav结构标记允许您将 int 存储为字符串 ( ) ,dynamodbav:",omitempty,string"但它不会调用我定义的.String()或Marshal/Unmarshal实现。


换句话说,它存储PartnerTypeTest为"1"not "TEST"。


如何才能做到这一点?


Cats萌萌
浏览 148回答 1
1回答

四季花海

对于 dynamodb,您可以为枚举实现编组器/解组器请尝试以下操作:// MarshalDynamoDBAttributeValue for ddbfunc (t PartnerType) MarshalDynamoDBAttributeValue(av *dynamodb.AttributeValue) error {&nbsp; &nbsp; s := t.String()&nbsp; &nbsp; av.S = &s&nbsp; &nbsp; return nil}// UnmarshalDynamoDBAttributeValue implements the Unmarshaler interfacefunc (t *PartnerType) UnmarshalDynamoDBAttributeValue(av *dynamodb.AttributeValue) error {&nbsp; &nbsp; // val := aws.StringValue(av.S)&nbsp; &nbsp; *t = PartnerTypeUnknown&nbsp; &nbsp; return nil}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go