Go'da DynamoDB GetItem (AWS SDK v2)
GetItem tek bir öğeyi tam birincil anahtarıyla okur. Go v2 için AWS SDK'da dynamodb.GetItemInput ile client.GetItem'i çağırırsınız; anahtar değerleri types paketinden türlü üyelerdir (dizeler için &types.AttributeValueMemberS{...}, sayılar için ...MemberN).
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)
}out.Item'ı düz bir Go struct'ına unmarshal etmek için github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue'den attributevalue.UnmarshalMap'i kullanın (dynamodbav struct etiketleriyle).
Açıklama
TableName— okunacak tablo; skaler giriş alanları işaretçidir, bu nedenle değişmez değerleriaws.String(...)ile sarmalayın.Key— her birincil anahtar özniteliğini içermelidir: basit bir anahtar için yalnızca bölüm anahtarı ya da bileşik bir anahtar için bölüm ve sıralama anahtarı.GetItemeksik bir anahtarı kabul etmez.ProjectionExpression— isteğe bağlı; hangi özniteliklerin geri döneceğini sınırlar (okuma maliyetini değil, bant genişliğini azaltır). Yansıtılan her öznitelikExpressionAttributeNamesaracılığıyla bir takma ad alır (#proj0…#proj3); bu daYeargibi ayrılmış sözcükleri güvende tutar.out.Item— hiçbir öğe eşleşmediğindenilolur; kullanmadan önce her zaman kontrol edin.- Varsayılan olarak okumalar nihai tutarlıdır. Güçlü tutarlı bir okuma için
ConsistentRead: aws.Bool(true)ayarlayın (2× RCU'ya mal olur, yalnızca temel tablo).
Görsel olarak yapın
Projeksiyonu veya koşullu bir okumayı elle mi oluşturuyorsunuz? İfadeyi bir araya getirmek ve tam ProjectionExpression / ExpressionAttributeNames değerlerini kopyalamak için ücretsiz DynamoDB Expression Builder'ı kullanın.
Tabloları bir grafik arayüzde (GUI) gezinmek ve GetItem çalıştırmak için — anahtar formu, sonuç ızgarası, üretilen kodu tek tıkla kopyalama — DynoTable'ı indirin.
İlgili örnekler
- Java'da DynamoDB GetItem — Java 2.x için AWS SDK ile aynı okuma.
- Go'da DynamoDB Query — tek bir öğe yerine bütün bir bölümü okuyun.
- DynamoDB bölüm anahtarları nasıl çalışır —
GetItem'in neden tam anahtara ihtiyaç duyduğu. - DynamoDB ResourceNotFoundException — buradaki her zamanki ilk hata: yanlış tablo adı veya bölge.
- "The provided key element does not match the schema" — geçirdiğiniz anahtar, tablonun anahtar şemasıyla eşleşmiyor.
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
En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.