DynamoDB GetItem di Go (AWS SDK v2)

GetItem membaca satu item berdasarkan primary key lengkap-nya. Di AWS SDK for Go v2 Anda memanggil client.GetItem dengan dynamodb.GetItemInput; nilai key adalah typed member dari package types (&types.AttributeValueMemberS{...} untuk string, ...MemberN untuk angka).

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

Untuk melakukan unmarshal out.Item ke dalam struct Go biasa, gunakan attributevalue.UnmarshalMap dari github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue (dengan struct tag dynamodbav).

Penjelasan

  • TableName — tabel yang dibaca; field input skalar berupa pointer, jadi bungkus literal dengan aws.String(...).
  • Key — harus menyertakan setiap atribut primary key: partition key saja untuk key sederhana, atau partition dan sort key untuk key komposit. GetItem tidak menerima key yang tidak lengkap.
  • ProjectionExpression — opsional; membatasi atribut mana yang kembali (menghemat bandwidth, bukan biaya baca). Setiap atribut yang diproyeksikan diberi alias (#proj0#proj3) via ExpressionAttributeNames, yang menjaga reserved word seperti Year tetap aman.
  • out.Itemnil ketika tidak ada item yang cocok; selalu periksa sebelum menggunakannya.
  • Secara default pembacaan bersifat eventually consistent. Set ConsistentRead: aws.Bool(true) untuk pembacaan strongly-consistent (biaya 2× RCU, hanya base table).

Lakukan secara visual

Membangun proyeksi atau pembacaan bersyarat dengan tangan? Gunakan DynamoDB Expression Builder gratis untuk menyusun expression dan menyalin nilai ProjectionExpression / ExpressionAttributeNames yang persis.

Untuk menelusuri tabel dan menjalankan GetItem di GUI — form key, grid hasil, salin sekali klik kode yang dihasilkan — unduh DynoTable.

Contoh terkait

References

Terakhir diverifikasi 2026-07-13 terhadap dokumentasi resmi AWS yang ditautkan di atas.

Bekerja dengan DynamoDB tanpa Console

DynoTable adalah klien desktop yang cepat untuk DynamoDB — jelajahi tabel, jalankan query gaya SQL, dan edit Item secara lokal.