DynamoDB UpdateItem em Go (AWS SDK v2)
UpdateItem altera atributos específicos de um item (e cria o item se ele não existir), deixando todo o resto intacto. No AWS SDK for Go v2 você chama client.UpdateItem com uma UpdateExpression em um dynamodb.UpdateItemInput.
Code
package main
import (
"context"
"fmt"
"log"
"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/config"
"github.com/aws/aws-sdk-go-v2/service/dynamodb"
"github.com/aws/aws-sdk-go-v2/service/dynamodb/types"
)
func main() {
ctx := context.TODO()
cfg, err := config.LoadDefaultConfig(ctx, config.WithRegion("us-east-1"))
if err != nil {
log.Fatalf("load config: %v", err)
}
client := dynamodb.NewFromConfig(cfg)
out, err := client.UpdateItem(ctx, &dynamodb.UpdateItemInput{
TableName: aws.String("Music"),
Key: map[string]types.AttributeValue{
"Artist": &types.AttributeValueMemberS{Value: "Arturo Sandoval"},
"SongTitle": &types.AttributeValueMemberS{Value: "Cubano Chant"},
},
UpdateExpression: aws.String("SET #upd0 = :updValue0, #upd1 = :updValue1 ADD #upd2 :updValue2"),
ExpressionAttributeNames: map[string]string{
"#upd0": "Genre",
"#upd1": "Year",
"#upd2": "Awards",
},
ExpressionAttributeValues: map[string]types.AttributeValue{
":updValue0": &types.AttributeValueMemberS{Value: "Latin Jazz"},
":updValue1": &types.AttributeValueMemberN{Value: "1994"},
":updValue2": &types.AttributeValueMemberN{Value: "1"},
},
ReturnValues: types.ReturnValueAllNew,
})
if err != nil {
log.Fatalf("update item: %v", err)
}
fmt.Println(out.Attributes) // the item after the update
}Explicação
Key— a chave primária completa do item a atualizar.UpdateExpression— uma ou mais cláusulas:SETatribui atributos (#upd0 = :updValue0defineGenre;#upd1 = :updValue1defineYear). Cada atributo recebe um alias viaExpressionAttributeNames, então palavras reservadas comoYearsão sempre seguras.ADDem um número faz um incremento atômico (ADD #upd2 :updValue2adiciona 1 aAwards) — seguro sob concorrência, sem race de read-modify-write.REMOVEapaga um atributo;DELETEremove elementos de um set.
ExpressionAttributeValues— o mapa:placeholder→ valor tipado (AttributeValueMemberS/...MemberN).ReturnValues: types.ReturnValueAllNew— retorna o item completo após a atualização emout.Attributes(tambémReturnValueUpdatedNew,ReturnValueAllOld,ReturnValueUpdatedOldouReturnValueNone).- Semântica de upsert —
UpdateItemcria o item se a chave não existir. Adicione umaConditionExpression(por exemplo,attribute_exists(Artist)) para atualizar somente. - Prefere construir expressões em código? O pacote
expression(github.com/aws/aws-sdk-go-v2/feature/dynamodb/expression) compõe cláusulasSET/ADDe gera os mapas de nome/valor por você.
Faça visualmente
O DynamoDB Expression Builder constrói cláusulas SET / ADD / REMOVE com os mapas de nome/valor e copia código executável.
Para editar itens numa GUI — altere um campo, revise a UpdateExpression gerada, copie o código — baixe o DynoTable.
Exemplos relacionados
- DynamoDB UpdateItem em Java — a mesma atualização com o AWS SDK for Java 2.x.
- DynamoDB PutItem em Go — substitua o item inteiro em vez disso.
- Update expressions do DynamoDB —
SET,ADD,REMOVE,DELETEe idiomas. - Entendendo ReturnValues — o que cada opção de
ReturnValuesfornece. - "Attribute name is a reserved keyword" — por que o mapa de aliases aqui não é opcional.
- Erros de sintaxe "Invalid UpdateExpression" — os erros comuns de sintaxe SET/ADD, decodificados.
References
- UpdateItem — Amazon DynamoDB API Reference
- Use UpdateItem with an AWS SDK or CLI — Amazon DynamoDB Developer Guide
- dynamodb package — AWS SDK for Go v2 (pkg.go.dev)
- dynamodb/types package — AWS SDK for Go v2 (pkg.go.dev)
- expression package — AWS SDK for Go v2 (pkg.go.dev)
- Update expressions — Amazon DynamoDB Developer Guide
Última verificação em 2026-07-13 contra a documentação oficial da AWS vinculada acima.