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/attributevalueattributevalue.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 をダウンロードしてください。

References

最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。

Console なしで DynamoDB を扱う

DynoTable は DynamoDB 向けの高速なデスクトップクライアントです — テーブルを閲覧し、SQL スタイルのクエリを実行し、アイテムをローカルで編集できます。