DynamoDB UpdateItem in Go (AWS SDK v2)

UpdateItem ändert bestimmte Attribute eines Items (und erstellt das Item, falls es nicht existiert) und lässt alles andere unangetastet. Im AWS SDK for Go v2 rufst du client.UpdateItem mit einer UpdateExpression auf einem dynamodb.UpdateItemInput auf.

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
}

Erklärung

  • Key — der vollständige Primärschlüssel des zu aktualisierenden Items.
  • UpdateExpression — eine oder mehrere Klauseln:
    • SET weist Attribute zu (#upd0 = :updValue0 setzt Genre; #upd1 = :updValue1 setzt Year). Jedes Attribut wird per ExpressionAttributeNames aliasiert, sodass reservierte Wörter wie Year immer sicher sind.
    • ADD auf einer Zahl macht ein atomares Inkrement (ADD #upd2 :updValue2 addiert 1 zu Awards) — sicher unter Nebenläufigkeit, kein Read-Modify-Write-Race. REMOVE löscht ein Attribut; DELETE entfernt Elemente aus einem Set.
  • ExpressionAttributeValues — die :placeholder → typisierter-Wert-Map (AttributeValueMemberS/...MemberN).
  • ReturnValues: types.ReturnValueAllNew — gibt das vollständige Item nach dem Update in out.Attributes zurück (auch ReturnValueUpdatedNew, ReturnValueAllOld, ReturnValueUpdatedOld oder ReturnValueNone).
  • Upsert-SemantikUpdateItem erstellt das Item, wenn der Schlüssel nicht existiert. Füge eine ConditionExpression hinzu (z. B. attribute_exists(Artist)) für Nur-Aktualisieren.
  • Lieber Ausdrücke im Code bauen? Das expression-Paket (github.com/aws/aws-sdk-go-v2/feature/dynamodb/expression) setzt SET/ADD-Klauseln zusammen und generiert die Name-/Wert-Maps für dich.

Visuell erledigen

Der DynamoDB Expression Builder baut SET / ADD / REMOVE-Klauseln mit den Name-/Wert-Maps und kopiert lauffähigen Code.

Um Items in einer GUI zu bearbeiten — ändere ein Feld, prüfe die generierte UpdateExpression, kopiere den Code — lade DynoTable herunter.

Verwandte Beispiele

References

Zuletzt verifiziert am 2026-07-13 gegen die oben verlinkte offizielle AWS-Dokumentation.

Mit DynamoDB ohne die Console arbeiten

DynoTable ist ein schneller Desktop-Client für DynamoDB — durchsuche Tabellen, führe SQL-artige Queries aus und bearbeite Items lokal.