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 avec aws.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. GetItem n'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) via ExpressionAttributeNames, ce qui met à l'abri les mots réservés comme Year.
  • out.Itemnil quand 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

References

Dernière vérification le 2026-07-13 par rapport à la documentation officielle AWS liée ci-dessus.

Travaille avec DynamoDB sans la Console

DynoTable est un client de bureau rapide pour DynamoDB — parcours les tables, exécute des requêtes de style SQL et édite les items en local.