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 结构体标签)。

说明

  • TableName — 要读取的表;标量输入字段是指针,因此用 aws.String(...) 包裹字面量。
  • Key — 必须包含每个主键属性:简单键仅需分区键,复合键则需分区键排序键。GetItem 不接受部分键。
  • ProjectionExpression — 可选;限制返回哪些属性(节省带宽,而非读取成本)。每个被投影的属性都通过 ExpressionAttributeNames 做了别名(#proj0#proj3),这能让像 Year 这样的保留字保持安全。
  • out.Item — 没有项目匹配时为 nil;使用前务必检查。
  • 默认情况下读取是最终一致性的。设置 ConsistentRead: aws.Bool(true) 可进行强一致性读取(费用为 2× RCU,仅限基表)。

可视化操作

手工构建投影或条件读取?使用免费的 DynamoDB Expression Builder 组装表达式,并复制精确的 ProjectionExpression / ExpressionAttributeNames 值。

想在 GUI 中浏览表并运行 GetItem——键表单、结果网格、一键复制生成的代码——请下载 DynoTable

相关示例

References

Last verified 2026-07-13 against the official AWS documentation linked above.

无需控制台即可使用 DynamoDB

DynoTable 是面向 DynamoDB 的快速桌面客户端 —— 浏览表、运行 SQL 风格的查询,并在本地编辑项。