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 denganaws.String(...).Key— harus menyertakan setiap atribut primary key: partition key saja untuk key sederhana, atau partition dan sort key untuk key komposit.GetItemtidak 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) viaExpressionAttributeNames, yang menjaga reserved word sepertiYeartetap aman.out.Item—nilketika 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
- DynamoDB GetItem di Java — pembacaan yang sama dengan AWS SDK for Java 2.x.
- DynamoDB Query di Go — baca seluruh partisi alih-alih satu item.
- Cara kerja partition key DynamoDB — mengapa
GetItemmembutuhkan key lengkap. - DynamoDB ResourceNotFoundException — error pertama yang biasa muncul di sini: nama tabel atau region salah.
- "The provided key element does not match the schema" — key yang Anda lewatkan tidak cocok dengan key schema tabel.
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
Terakhir diverifikasi 2026-07-13 terhadap dokumentasi resmi AWS yang ditautkan di atas.