我在 go 中有以下PartnerType“enum”結構:// PartnerType enumtype PartnerType intconst ( // 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 enumfunc (t PartnerType) MarshalJSON() ([]byte, error) { s := t.String() return json.Marshal(s)}// UnmarshalJSON for enumfunc (t *PartnerType) UnmarshalJSON(b []byte) error { *t = PartnerTypeUnknown return nil}// MarshalText implements the text marshaller methodfunc (t *PartnerType) MarshalText() ([]byte, error) { return []byte(t.String()), nil}// UnmarshalText implements the text unmarshaller methodfunc (t *PartnerType) UnmarshalText(text []byte) error { *t = PartnerTypeUnknown return nil}// Partner entitytype 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"。如何才能做到這一點?
1 回答

四季花海
TA貢獻1811條經驗 獲得超5個贊
對于 dynamodb,您可以為枚舉實現編組器/解組器
請嘗試以下操作:
// MarshalDynamoDBAttributeValue for ddb
func (t PartnerType) MarshalDynamoDBAttributeValue(av *dynamodb.AttributeValue) error {
s := t.String()
av.S = &s
return nil
}
// UnmarshalDynamoDBAttributeValue implements the Unmarshaler interface
func (t *PartnerType) UnmarshalDynamoDBAttributeValue(av *dynamodb.AttributeValue) error {
// val := aws.StringValue(av.S)
*t = PartnerTypeUnknown
return nil
}
- 1 回答
- 0 關注
- 170 瀏覽
添加回答
舉報
0/150
提交
取消