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:
    • SET atribui atributos (#upd0 = :updValue0 define Genre; #upd1 = :updValue1 define Year). Cada atributo recebe um alias via ExpressionAttributeNames, então palavras reservadas como Year são sempre seguras.
    • ADD em um número faz um incremento atômico (ADD #upd2 :updValue2 adiciona 1 a Awards) — seguro sob concorrência, sem race de read-modify-write. REMOVE apaga um atributo; DELETE remove elementos de um set.
  • ExpressionAttributeValues — o mapa :placeholder → valor tipado (AttributeValueMemberS/...MemberN).
  • ReturnValues: types.ReturnValueAllNew — retorna o item completo após a atualização em out.Attributes (também ReturnValueUpdatedNew, ReturnValueAllOld, ReturnValueUpdatedOld ou ReturnValueNone).
  • Semântica de upsertUpdateItem cria o item se a chave não existir. Adicione uma ConditionExpression (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áusulas SET/ADD e 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

References

Última verificação em 2026-07-13 contra a documentação oficial da AWS vinculada acima.

Trabalhe com o DynamoDB sem o Console

O DynoTable é um cliente desktop rápido para o DynamoDB — navegue pelas tabelas, execute consultas no estilo SQL e edite itens localmente.