DynamoDB GetItem en Go (AWS SDK v2)
GetItem lit un seul élément par sa clé primaire complète. Dans l'AWS SDK for Go v2 tu appelles client.GetItem avec un dynamodb.GetItemInput ; les valeurs de clé sont des membres typés du package types (&types.AttributeValueMemberS{...} pour les chaînes, ...MemberN pour les nombres).
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.GetItem(ctx, &dynamodb.GetItemInput{
TableName: aws.String("Music"),
Key: map[string]types.AttributeValue{
"Artist": &types.AttributeValueMemberS{Value: "Arturo Sandoval"},
"SongTitle": &types.AttributeValueMemberS{Value: "Cubano Chant"},
},
ProjectionExpression: aws.String("#proj0, #proj1, #proj2, #proj3"),
ExpressionAttributeNames: map[string]string{
"#proj0": "Artist",
"#proj1": "SongTitle",
"#proj2": "AlbumTitle",
"#proj3": "Year",
},
})
if err != nil {
log.Fatalf("get item: %v", err)
}
if out.Item == nil {
fmt.Println("Item not found")
return
}
fmt.Println(out.Item)
}Pour désérialiser out.Item dans une structure Go simple, utilise attributevalue.UnmarshalMap de github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue (avec des tags de structure dynamodbav).
Explication
TableName— la table à lire ; les champs d'entrée scalaires sont des pointeurs, donc enveloppe les littéraux avecaws.String(...).Key— doit inclure chaque attribut de clé primaire : la clé de partition seule pour une clé simple, ou la clé de partition et la clé de tri pour une clé composite.GetItemn'accepte pas de clé partielle.ProjectionExpression— optionnel ; limite quels attributs sont renvoyés (économise de la bande passante, pas du coût de lecture). Chaque attribut projeté est aliasé (#proj0…#proj3) viaExpressionAttributeNames, ce qui met à l'abri les mots réservés commeYear.out.Item—nilquand aucun élément ne correspond ; vérifie toujours avant de l'utiliser.- Par défaut les lectures sont à terme. Définis
ConsistentRead: aws.Bool(true)pour une lecture fortement cohérente (coûte 2× le RCU, table de base uniquement).
À faire visuellement
Tu construis la projection ou une lecture conditionnelle à la main ? Utilise le DynamoDB Expression Builder gratuit pour assembler l'expression et copier les valeurs exactes ProjectionExpression / ExpressionAttributeNames.
Pour parcourir les tables et exécuter GetItem dans une interface graphique — formulaire de clé, grille de résultats, copie en un clic du code généré — télécharge DynoTable.
Exemples liés
- DynamoDB GetItem en Java — la même lecture avec l'AWS SDK for Java 2.x.
- DynamoDB Query en Go — lire une partition entière au lieu d'un seul élément.
- Comment fonctionnent les clés de partition DynamoDB — pourquoi
GetItema besoin de la clé complète. - DynamoDB ResourceNotFoundException — la première erreur habituelle ici : mauvais nom de table ou région.
- "The provided key element does not match the schema" — la clé que tu passes ne correspond pas au schéma de clé de la table.
References
- GetItem — Amazon DynamoDB API Reference
- Use GetItem 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)
- attributevalue package — AWS SDK for Go v2 (pkg.go.dev)
- Read consistency — Amazon DynamoDB Developer Guide
Dernière vérification le 2026-07-13 par rapport à la documentation officielle AWS liée ci-dessus.