Go'da DynamoDB GetItem (AWS SDK v2)
AWS SDK for Go v2'de bir öğe map[string]types.AttributeValue'dur ve types.AttributeValue mühürlü bir arayüzdür: tek gerçekleştirimleri, SDK'nın birlikte getirdiği on AttributeValueMember* yapısıdır. Onlarla bir anahtar yazmak kolaydır. Değerleri geri okumak ise Go'nun diğer bütün SDK'lardan ayrıldığı yerdir.
client.GetItem yine tam birincil anahtarı ister, her yerdeki gibi.
Kod
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)
}Açıklama
- Skalerler işaretçidir —
TableName,ProjectionExpressionveConsistentRead*stringve*bool'dur; böylece SDK "ayarlanmamış"ı sıfır değerinden ayırt edebilir.aws.String,aws.Boolveaws.Int32yalnızca bunun için vardır. - Sayılar string olarak gelir —
AttributeValueMemberN.Valuebirstring'dir, çünkü DynamoDB sayıları tel üzerinde string olarak gönderir.Year'ı okumak,out.Item["Year"].(*types.AttributeValueMemberN)ve ardındanstrconv.Atoidemektir. Onaylamanın virgül-ok biçimini kullanın; çıplak biçim, öznitelik eksik ya da farklı türdeyse panikler. - Çıkış yolu
attributevalue.UnmarshalMap'tir —github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalueiçinden gelir, öğenin tamamınıdynamodbavetiketli bir yapıya eşler ve string'den sayıya dönüşümü yapar. Bir öğenin birkaçtan fazla özniteliği olduğu anda uzanmaya değer. - Iska durumunda
out.Itemnil'dir veerrdenil'dir. İkisini ayırt etmeniz gerekmiyorsalen(out.Item) == 0hem nil'i hem de boşu kapsar. - Hataları
errors.Asile eşleştirin — Go v2 hizmet arızalarını bir Smithy işlem hatasına sarar, dolayısıylaerr == …deerr.Error()üzerinde string eşleştirmesi de sessizce başarısız olur.var nf *types.ResourceNotFoundExceptionbildirin ve adresini geçirin. ConsistentRead: aws.Bool(true), okuma maliyetini ikiye katlar ve bir GSI üzerinde reddedilir. Yukarıdaki#projtakma adları da süs değildir:Yearbir ayrılmış sözcüktür ve onu doğrudan adlandıran bir projeksiyon reddedilir.
Görsel olarak yapın
AttributeValueMember* biçimi ile düz JSON arasında çeviri yapmak Go'da sürekli bir vergidir. Yalnızca tek bir öğeyi okumanız ya da yapıştırmanız gerektiğinde DynamoDB JSON dönüştürücüsü bu gidiş dönüşü tarayıcıda yapar.
DynoTable ise öğeleri sıradan satırlar olarak gösterir ve ızgaranın arkasındaki sorguyu aynı SDK v2 türleri üzerine kurulu bir Go programı olarak dışa aktarır. DynoTable'ı indirin.
İlgili örnekler
- Java'da DynamoDB GetItem — AWS SDK for Java 2.x ile aynı okuma.
- Go'da DynamoDB Query — tek öğe yerine bütün bir bölümü okuyun.
- DynamoDB bölüm anahtarları nasıl çalışır —
GetItemneden tam anahtara ihtiyaç duyar. - DynamoDB ResourceNotFoundException — buradaki her zamanki ilk hata: yanlış tablo adı ya da bölge.
- "The provided key element does not match the schema" — geçirdiğiniz anahtar tablonun anahtar şemasıyla eşleşmiyor.
Kaynaklar
- 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-28 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.