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çidirTableName, ProjectionExpression ve ConsistentRead *string ve *bool'dur; böylece SDK "ayarlanmamış"ı sıfır değerinden ayırt edebilir. aws.String, aws.Bool ve aws.Int32 yalnızca bunun için vardır.
  • Sayılar string olarak gelirAttributeValueMemberN.Value bir string'dir, çünkü DynamoDB sayıları tel üzerinde string olarak gönderir. Year'ı okumak, out.Item["Year"].(*types.AttributeValueMemberN) ve ardından strconv.Atoi demektir. Onaylamanın virgül-ok biçimini kullanın; çıplak biçim, öznitelik eksik ya da farklı türdeyse panikler.
  • Çıkış yolu attributevalue.UnmarshalMap'tirgithub.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue içinden gelir, öğenin tamamını dynamodbav etiketli 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.Item nil'dir ve err de nil'dir. İkisini ayırt etmeniz gerekmiyorsa len(out.Item) == 0 hem nil'i hem de boşu kapsar.
  • Hataları errors.As ile eşleştirin — Go v2 hizmet arızalarını bir Smithy işlem hatasına sarar, dolayısıyla err == … de err.Error() üzerinde string eşleştirmesi de sessizce başarısız olur. var nf *types.ResourceNotFoundException bildirin ve adresini geçirin.
  • ConsistentRead: aws.Bool(true), okuma maliyetini ikiye katlar ve bir GSI üzerinde reddedilir. Yukarıdaki #proj takma adları da süs değildir: Year bir 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

Kaynaklar

En son 2026-07-28 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.

Console olmadan DynamoDB ile çalış

DynamoDB’nin çalıştıramadığı gerçek SQL’i çalıştıran hızlı bir DynamoDB masaüstü istemcisi — JOINs, GROUP BY, toplamalar — görsel düzenleme ve kendi Bedrock anahtarların üzerinde bir yapay zekâ aracısıyla.

30 günlük ücretsiz deneme, kredi kartı yok — ardından süre sınırı olmayan Ücretsiz plan.