DynamoDB UpdateItem en Go (AWS SDK v2)
UpdateItem cambia atributos concretos de un item (y crea el item si no existe), dejando intacto todo lo demás. En AWS SDK para Go v2 llamas a client.UpdateItem con un UpdateExpression sobre un 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
}Explicación
Key— la clave primaria completa del item a actualizar.UpdateExpression— una o más cláusulas:SETasigna atributos (#upd0 = :updValue0estableceGenre;#upd1 = :updValue1estableceYear). Cada atributo lleva un alias medianteExpressionAttributeNames, así que palabras reservadas comoYearestán siempre a salvo.ADDsobre un número hace un incremento atómico (ADD #upd2 :updValue2suma 1 aAwards) — seguro bajo concurrencia, sin condición de carrera de lectura-modificación-escritura.REMOVEelimina un atributo;DELETEquita elementos de un conjunto.
ExpressionAttributeValues— el mapa:placeholder→ valor tipado (AttributeValueMemberS/...MemberN).ReturnValues: types.ReturnValueAllNew— devuelve el item completo tras la actualización enout.Attributes(tambiénReturnValueUpdatedNew,ReturnValueAllOld,ReturnValueUpdatedOldoReturnValueNone).- Semántica de upsert —
UpdateItemcrea el item si la clave no existe. Añade unConditionExpression(por ejemplo,attribute_exists(Artist)) para actualizar solo. - ¿Prefieres construir expresiones en código? El paquete
expression(github.com/aws/aws-sdk-go-v2/feature/dynamodb/expression) compone cláusulasSET/ADDy genera los mapas de nombres/valores por ti.
Hazlo visualmente
El DynamoDB Expression Builder construye cláusulas SET / ADD / REMOVE con los mapas de nombres/valores y copia código ejecutable.
Para editar items en una interfaz gráfica — cambia un campo, revisa el UpdateExpression generado, copia el código — descarga DynoTable.
Ejemplos relacionados
- DynamoDB UpdateItem en Java — la misma actualización con AWS SDK para Java 2.x.
- DynamoDB PutItem en Go — reemplaza el item completo en su lugar.
- Expresiones de actualización de DynamoDB —
SET,ADD,REMOVE,DELETEe idiomas. - Entender ReturnValues — qué te da cada opción de
ReturnValues. - "Attribute name is a reserved keyword" — por qué el mapa de alias aquí no es opcional.
- Errores de sintaxis "Invalid UpdateExpression" — los errores comunes de sintaxis SET/ADD, descifrados.
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
Verificado por última vez el 2026-07-13 contra la documentación oficial de AWS enlazada arriba.