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:SETweist Attribute zu (#upd0 = :updValue0setztGenre;#upd1 = :updValue1setztYear). Jedes Attribut wird perExpressionAttributeNamesaliasiert, sodass reservierte Wörter wieYearimmer sicher sind.ADDauf einer Zahl macht ein atomares Inkrement (ADD #upd2 :updValue2addiert 1 zuAwards) — sicher unter Nebenläufigkeit, kein Read-Modify-Write-Race.REMOVElöscht ein Attribut;DELETEentfernt Elemente aus einem Set.
ExpressionAttributeValues— die:placeholder→ typisierter-Wert-Map (AttributeValueMemberS/...MemberN).ReturnValues: types.ReturnValueAllNew— gibt das vollständige Item nach dem Update inout.Attributeszurück (auchReturnValueUpdatedNew,ReturnValueAllOld,ReturnValueUpdatedOldoderReturnValueNone).- Upsert-Semantik —
UpdateItemerstellt das Item, wenn der Schlüssel nicht existiert. Füge eineConditionExpressionhinzu (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) setztSET/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
- DynamoDB UpdateItem in Java — dasselbe Update mit AWS SDK for Java 2.x.
- DynamoDB PutItem in Go — stattdessen das ganze Item ersetzen.
- DynamoDB-Update-Ausdrücke —
SET,ADD,REMOVE,DELETEund Idiome. - ReturnValues verstehen — was dir jede
ReturnValues-Option gibt. - "Attribute name is a reserved keyword" — warum die Alias-Map hier nicht optional ist.
- "Invalid UpdateExpression"-Syntaxfehler — die häufigen SET/ADD-Syntaxfehler, entschlüsselt.
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
Zuletzt verifiziert am 2026-07-13 gegen die oben verlinkte offizielle AWS-Dokumentation.