Closed2

GoでDynamoDBから値を取得する

u1u1

ChatGPTでやり方色々聞いてたら割と良いサンプルコード出てきたのでここにメモしておく。

u1u1
package main

import (
	"context"
	"fmt"
	"log"

	"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() {
	// AWS 設定をロード
	cfg, err := config.LoadDefaultConfig(context.TODO())
	if err != nil {
		log.Fatal(err)
	}

	// DynamoDB サービスクライアントを作成
	client := dynamodb.NewFromConfig(cfg)

	// Query 操作の入力パラメータを作成
	input := &dynamodb.QueryInput{
		TableName:              "YourTableName", // テーブル名を指定
		KeyConditionExpression: "YourPartitionKey = :partitionKey", // パーティションキーの条件式を指定
		ExpressionAttributeValues: map[string]types.AttributeValue{
			":partitionKey": &types.AttributeValueMemberS{
				Value: "YourPartitionKeyValue", // パーティションキーの値を指定
			},
		},
	}

	// Query 操作を実行
	result, err := client.Query(context.TODO(), input)
	if err != nil {
		log.Fatal(err)
	}

	// 結果を処理
	if len(result.Items) == 0 {
		fmt.Println("データが見つかりませんでした")
		return
	}

	// 取得したアイテムを処理
	for _, item := range result.Items {
		// 必要な属性の値を取得
		partitionKeyValue, ok := item["YourPartitionKey"]
		if !ok {
			fmt.Println("パーティションキーの値が取得できません")
			continue
		}
		partitionKeyStringValue, ok := partitionKeyValue.(*types.AttributeValueMemberS)
		if !ok {
			fmt.Println("パーティションキーの値が文字列型ではありません")
			continue
		}

		sortKeyValue, ok := item["YourSortKey"]
		if !ok {
			fmt.Println("ソートキーの値が取得できません")
			continue
		}
		sortKeyNumberValue, ok := sortKeyValue.(*types.AttributeValueMemberN)
		if !ok {
			fmt.Println("ソートキーの値が数値型ではありません")
			continue
		}

		fmt.Println("パーティションキー:", partitionKeyStringValue.Value)
		fmt.Println("ソートキー:", sortKeyNumberValue.Value)
	}
}
このスクラップは2023/05/26にクローズされました