Я застрял, когда обновляю пустые строковые значения в структуре для обновления таблицы DynamodB.
В настоящее время у меня есть эта структура
type Client struct {
ClientID *string `json:"client_key,omitempty"`
Name *string `json:"client_name,omitempty"`
Address *string `json:"address,omitempty"`
Country *string `json:"country,omitempty"`
City *string `json:"city,omitempty"`
State *string `json:"state,omitempty"`
PostCode *string `json:"post_code,omitempty"`
CreatedAt *time.Time `json:"created_at,omitempty"`
}
И этот код при обновленииitem
keyAttr, err := dynamodbattribute.MarshalMap(key)
if err != nil {
return nil, err
}
valAttr, err := dynamodbattribute.MarshalMap(attributes)
if err != nil {
return nil, err
}
keyAttr
будет использоваться для поля Key
, а valAttr
будет использоваться в поле ExpressionAttributeValues
.Обратите внимание, что я не включил функцию полного обновления полей для экономии места.Но я сделаю это, если вы попросите об этом.
В настоящее время функция работает нормально, кроме случаев, когда я обновил одно из полей пустой строкой.Например, client.Address = aws.String("")
.Несмотря на то, что я могу выполнить в Dynamodb преобразование моей пустой строки в null
, я не могу найти способ обновить ее из-за тега omitempty
.
Мне нужен тег omitempty, чтобы игнорировать всеnil
значений.Однако я только что исследовал, что тег omitempty
также пропускает пустые строковые значения.В настоящее время я должен создать структуру в своей функции следующим образом.
type client struct {
Name *string `json:"client_name"`
Address *string `json:"address"`
Country *string `json:"country"`
City *string `json:"city"`
State *string `json:"state"`
PostCode *string `json:"post_code"`
}
Но я не фанат повторения вещей.Итак, вопрос: есть ли лучший способ сделать это?Как вы, ребята, используете структуры с DynamodB?
РЕДАКТИРОВАТЬ
Судя по комментарию @ Питера, json.Encode()
печатает пустую строку, если она не равна нулю.
{"client_key":"test","username":"test","email":"","first_name":"test","last_name":"","phone":"","title":"","email_verified":false,"phone_verified":false,"updated_at":"2018-12-06T14:04:56.2743841+11:00"}
Проблема, кажется, в dynamodbattribute.MarshalMap
функция