DynamoDB GetItem di Go (AWS SDK v2)
Di AWS SDK for Go v2 sebuah item adalah map[string]types.AttributeValue, dan types.AttributeValue adalah interface tertutup: satu-satunya implementasi adalah sepuluh struct AttributeValueMember* yang dikirimkan SDK. Menulis sebuah key dengan struct itu gampang. Membaca nilainya kembali adalah tempat Go menyimpang dari semua SDK lain.
client.GetItem tetap menuntut primary key lengkap, sama seperti di mana pun.
Kode
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)
}Penjelasan
- Skalar berupa pointer —
TableName,ProjectionExpressiondanConsistentReadbertipe*stringdan*boolsupaya SDK bisa membedakan "tidak diset" dari nilai nol.aws.String,aws.Booldanaws.Int32ada untuk itu dan tidak untuk hal lain. - Angka tiba sebagai string —
AttributeValueMemberN.Valuebertipestring, karena DynamoDB mengirim angka sebagai string di jalur wire. MembacaYearberartiout.Item["Year"].(*types.AttributeValueMemberN)lalustrconv.Atoi. Pakai bentuk comma-ok dari type assertion; bentuk telanjangnya panik ketika atributnya hilang atau bertipe lain. attributevalue.UnmarshalMapadalah jalan keluarnya — darigithub.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue, ia memetakan seluruh item ke sebuah struct dengan tagdynamodbavdan melakukan konversi string-ke-angka. Layak dipakai begitu sebuah item punya lebih dari beberapa atribut.out.Itembernilainilsaat tidak ketemu, danerrjuganil.len(out.Item) == 0mencakup nil maupun kosong kalau Anda tidak perlu membedakan keduanya.- Cocokkan error dengan
errors.As— Go v2 membungkus kegagalan layanan dalam sebuah Smithy operation error, jadierr == …dan pencocokan string padaerr.Error()sama-sama gagal diam-diam. Deklarasikanvar nf *types.ResourceNotFoundExceptionlalu berikan alamatnya. ConsistentRead: aws.Bool(true)melipatgandakan biaya baca dan ditolak pada sebuah GSI. Alias#projdi atas juga bukan hiasan:Yearadalah reserved word, dan projection yang menyebutnya secara langsung akan ditolak.
Lakukan secara visual
Menerjemahkan bolak-balik antara bentuk AttributeValueMember* dan JSON biasa adalah pajak yang terus-menerus di Go. Konverter DynamoDB JSON melakukan perjalanan bolak-balik itu di browser ketika Anda hanya perlu membaca atau menempelkan satu item.
DynoTable justru menampilkan item sebagai baris biasa, dan mengekspor kueri di balik grid itu sebagai program Go yang dibangun di atas tipe SDK v2 yang sama. Unduh DynoTable.
Contoh terkait
- DynamoDB GetItem di Java — pembacaan yang sama dengan AWS SDK for Java 2.x.
- DynamoDB Query di Go — membaca satu partisi utuh alih-alih satu item.
- Cara kerja partition key DynamoDB — mengapa
GetItembutuh 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 berikan tidak cocok dengan key schema tabel.
Referensi
- 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-28 terhadap dokumentasi resmi AWS yang ditautkan di atas.