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:
    • SET asigna atributos (#upd0 = :updValue0 establece Genre; #upd1 = :updValue1 establece Year). Cada atributo lleva un alias mediante ExpressionAttributeNames, así que palabras reservadas como Year están siempre a salvo.
    • ADD sobre un número hace un incremento atómico (ADD #upd2 :updValue2 suma 1 a Awards) — seguro bajo concurrencia, sin condición de carrera de lectura-modificación-escritura. REMOVE elimina un atributo; DELETE quita elementos de un conjunto.
  • ExpressionAttributeValues — el mapa :placeholder → valor tipado (AttributeValueMemberS/...MemberN).
  • ReturnValues: types.ReturnValueAllNew — devuelve el item completo tras la actualización en out.Attributes (también ReturnValueUpdatedNew, ReturnValueAllOld, ReturnValueUpdatedOld o ReturnValueNone).
  • Semántica de upsertUpdateItem crea el item si la clave no existe. Añade un ConditionExpression (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áusulas SET/ADD y 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

References

Verificado por última vez el 2026-07-13 contra la documentación oficial de AWS enlazada arriba.

Trabaja con DynamoDB sin la Consola

DynoTable es un cliente de escritorio rápido para DynamoDB: explora tablas, ejecuta consultas estilo SQL y edita Items localmente.