DynamoDB GetItem in Go (AWS SDK v2)

GetItem liest ein einzelnes Item über seinen vollständigen Primärschlüssel. Im AWS SDK for Go v2 rufst du client.GetItem mit einem dynamodb.GetItemInput auf; Schlüsselwerte sind typisierte Member aus dem types-Paket (&types.AttributeValueMemberS{...} für Strings, ...MemberN für Zahlen).

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)
}

Um out.Item in ein schlichtes Go-Struct zu unmarshallen, nutze attributevalue.UnmarshalMap aus github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue (mit dynamodbav-Struct-Tags).

Erklärung

  • TableName — die Tabelle, aus der gelesen wird; skalare Eingabefelder sind Pointer, also umschließe Literale mit aws.String(...).
  • Key — muss jedes Primärschlüssel-Attribut enthalten: den Partitionsschlüssel allein bei einem einfachen Schlüssel oder Partitions- und Sortierschlüssel bei einem zusammengesetzten Schlüssel. GetItem akzeptiert keinen unvollständigen Schlüssel.
  • ProjectionExpression — optional; begrenzt, welche Attribute zurückkommen (spart Bandbreite, nicht Read-Kosten). Jedes projizierte Attribut wird per ExpressionAttributeNames aliasiert (#proj0#proj3), was reservierte Wörter wie Year absichert.
  • out.Itemnil, wenn kein Item passt; prüfe immer, bevor du es verwendest.
  • Standardmäßig sind Reads letztendlich konsistent. Setze ConsistentRead: aws.Bool(true) für einen stark konsistenten Read (kostet 2× die RCU, nur Basistabelle).

Visuell erledigen

Die Projektion oder einen bedingten Read von Hand bauen? Nutze den kostenlosen DynamoDB Expression Builder, um die Expression zusammenzustellen und die exakten ProjectionExpression / ExpressionAttributeNames-Werte zu kopieren.

Um Tabellen in einer GUI zu durchsuchen und GetItem auszuführen — Schlüsselformular, Ergebnisraster, Ein-Klick-Kopie des generierten Codes — 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.