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 mitaws.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.GetItemakzeptiert keinen unvollständigen Schlüssel.ProjectionExpression— optional; begrenzt, welche Attribute zurückkommen (spart Bandbreite, nicht Read-Kosten). Jedes projizierte Attribut wird perExpressionAttributeNamesaliasiert (#proj0…#proj3), was reservierte Wörter wieYearabsichert.out.Item—nil, 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
- DynamoDB GetItem in Java — derselbe Read mit AWS SDK for Java 2.x.
- DynamoDB Query in Go — eine ganze Partition statt eines einzelnen Items lesen.
- Wie DynamoDB-Partitionsschlüssel funktionieren — warum
GetItemden vollständigen Schlüssel braucht. - DynamoDB ResourceNotFoundException — der übliche erste Fehler hier: falscher Tabellenname oder falsche Region.
- "The provided key element does not match the schema" — der übergebene Schlüssel passt nicht zum Schlüsselschema der Tabelle.
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
Zuletzt verifiziert am 2026-07-13 gegen die oben verlinkte offizielle AWS-Dokumentation.