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。
相关示例
- Java 中的 DynamoDB GetItem — 用 AWS SDK for Java 2.x 完成同样的读取。
- Go 中的 DynamoDB Query — 读取整个分区而非单个项目。
- DynamoDB 分区键的工作原理 — 为什么
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
Last verified 2026-07-13 against the official AWS documentation linked above.