Я работал над игрушечным проектом и заметил, что Dynamo добавил суффикс (NULL) к двум именам моих атрибутов. Раньше я этого не замечал, поэтому я предполагаю, что это произошло после одного из моих изменений кода. Я не мог найти никаких упоминаний об этом поведении в Интернете.
Сценарий, который я запускаю, — это простой PutItem
полученный из официальной документации Dynamodb, где я вставляю в таблицу несколько фиктивных пользователей.
func InsertModel(m interface{}) error {
av, err := dynamodbattribute.MarshalMap(m)
if err != nil {
return fmt.Errorf("handlers: Got error marshalling map: %v", err)
}
input := &dynamodb.PutItemInput{
Item: av,
TableName: aws.String(appTableName),
ConditionExpression: aws.String("attribute_not_exists(PK) AND attribute_not_exists(SK)"),
}
_, err = svc.PutItem(input)
if err != nil {
return fmt.Errorf("handlers: Got error calling PutItem: %v", err)
}
return nil
}
m
(пользовательские фиктивные данные) имеет все поля типа string
:
UserModel{PK: "910cc6d8-b7e2-dfg6-d8d4-sh6d0e3fde6b", SK: "user_info", Name: "bla", ImageURI: "aaa"},
Когда я удаляю поля «Имя» и «ImageURI», PutItem
вставляет логическое значение true
в значение поля, как показано ниже.
Вот значение в av
после операции MarshalMap.
- с заполненными полями «Имя» и «ImageURI»:
map[ImageURI:{
S: "aaa"
} Name:{
S: "bla"
} PK:{
S: "910cc6d8-b7e2-dfg6-d8d4-sh6d0e3fde6b"
} SK:{
S: "user_info"
}]
- а здесь без "Name" и "ImageURI" как в
UserModel{PK: "910cc6d8-b7e2-dfg6-d8d4-sh6d0e3fde6b", SK: "user_info"}
map[ImageURI:{
NULL: true
} Name:{
NULL: true
} PK:{
S: "910cc6d8-b7e2-dfg6-d8d4-sh6d0e3fde6b"
} SK:{
S: "user_info"
}]
Я попытался удалить все записи из таблицы и снова вставить, но поведение продолжается. Кроме того, я проделал тот же процесс для атрибута типа int
(вставив объект с заполненным и не заполненным атрибутом int), и я получаю 0, когда он не заполнен (чего я и ожидал). Я попытался воспроизвести это с другим атрибутом строкового типа и получил такое же поведение (истинно, когда пусто), но имя атрибута не имеет суффикса NULL.
Таким образом, кажется, что это поведение в основном происходит с типом string
в моем случае, и я получаю только суффикс NULL в атрибутах «Имя» и «ImageURI», но не в другом строковом атрибуте, который я пробовал (ни инт один).