Go (AWS SDK v2) での DynamoDB GetItem
GetItem は完全なプライマリキーによって単一のアイテムを読み取ります。AWS SDK for Go v2 では、dynamodb.GetItemInput を指定して client.GetItem を呼び出します。キー値は types パッケージの型付きメンバー(文字列には &types.AttributeValueMemberS{...}、数値には ...MemberN)です。
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)
}out.Item を素の Go の構造体にアンマーシャルするには、github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue の attributevalue.UnmarshalMap を(dynamodbav 構造体タグとともに)使いましょう。
Explanation
TableName— 読み取り元のテーブル。スカラーな入力フィールドはポインターなので、リテラルはaws.String(...)でラップします。Key— すべてのプライマリキー属性を含める必要があります。シンプルキーならパーティションキーのみ、複合キーならパーティションキーとソートキーの両方です。GetItemは部分的なキーを受け付けません。ProjectionExpression— 任意。返される属性を制限します(帯域は節約しますが読み取りコストは減りません)。投影される各属性はExpressionAttributeNamesを介してエイリアス化され(#proj0…#proj3)、Yearのような予約語を安全に扱えます。out.Item— 一致するアイテムがない場合はnilです。使う前に必ず確認しましょう。- 読み取りはデフォルトで結果整合性です。強い整合性のある読み取り(RCU 2倍、ベーステーブルのみ)には
ConsistentRead: aws.Bool(true)を設定します。
Do it visually
投影や条件付き読み取りを手作業で組み立てていますか?無料の DynamoDB Expression Builder を使って式を組み立て、正確な ProjectionExpression / ExpressionAttributeNames の値をコピーしましょう。
テーブルを参照し、GUI で GetItem を実行するには(キーフォーム、結果グリッド、生成コードのワンクリックコピー)、DynoTable をダウンロードしてください。
Related examples
- DynamoDB GetItem in Java — AWS SDK for Java 2.x による同じ読み取り。
- DynamoDB Query in Go — 1つのアイテムではなくパーティション全体を読み取る。
- How DynamoDB partition keys work — なぜ
GetItemに完全なキーが必要なのか。 - DynamoDB ResourceNotFoundException — ここで最初によく遭遇するエラー。テーブル名やリージョンの誤り。
- "The provided key element does not match the schema" — 渡したキーがテーブルのキースキーマと一致しない。
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
最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。