UpdateItem DynamoDB en Go (AWS SDK v2)
UpdateItem modifie des attributs spécifiques d'un élément (et crée l'élément s'il n'existe pas), en laissant tout le reste intact. Dans AWS SDK pour Go v2, tu appelles client.UpdateItem avec une UpdateExpression sur 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
}Explication
Key— la clé primaire complète de l'élément à mettre à jour.UpdateExpression— une ou plusieurs clauses :SETassigne des attributs (#upd0 = :updValue0fixeGenre;#upd1 = :updValue1fixeYear). Chaque attribut est aliasé viaExpressionAttributeNames, donc les mots réservés commeYearsont toujours à l'abri.ADDsur un nombre fait un incrément atomique (ADD #upd2 :updValue2ajoute 1 àAwards) — sûr en concurrence, sans course lecture-modification-écriture.REMOVEsupprime un attribut ;DELETEretire des éléments d'un ensemble.
ExpressionAttributeValues— la map:placeholder→ valeur typée (AttributeValueMemberS/...MemberN).ReturnValues: types.ReturnValueAllNew— renvoie l'élément complet après la mise à jour dansout.Attributes(aussiReturnValueUpdatedNew,ReturnValueAllOld,ReturnValueUpdatedOldouReturnValueNone).- Sémantique d'upsert —
UpdateItemcrée l'élément si la clé n'existe pas. Ajoute uneConditionExpression(par ex.attribute_exists(Artist)) pour une mise à jour seulement. - Tu préfères construire les expressions dans le code ? Le package
expression(github.com/aws/aws-sdk-go-v2/feature/dynamodb/expression) compose les clausesSET/ADDet génère les maps de noms/valeurs à ta place.
À faire visuellement
Le DynamoDB Expression Builder construit les clauses SET / ADD / REMOVE avec les maps de noms/valeurs et copie du code exécutable.
Pour éditer des éléments dans une interface graphique — changer un champ, examiner l'UpdateExpression générée, copier le code — télécharge DynoTable.
Exemples liés
- UpdateItem DynamoDB en Java — la même mise à jour avec AWS SDK pour Java 2.x.
- PutItem DynamoDB en Go — remplacer l'élément entier à la place.
- Expressions de mise à jour DynamoDB —
SET,ADD,REMOVE,DELETEet les idiomes. - Comprendre ReturnValues — ce que chaque option
ReturnValueste donne. - "Attribute name is a reserved keyword" — pourquoi la map d'alias ici n'est pas optionnelle.
- "Invalid UpdateExpression" syntax errors — les erreurs de syntaxe SET/ADD courantes, décodées.
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
Dernière vérification le 2026-07-13 par rapport à la documentation officielle AWS liée ci-dessus.