在 Go(AWS SDK v2)中使用 DynamoDB GetItem
GetItem 以項目的完整 primary key 讀取單一項目。在 AWS SDK for Go v2 中,你以 dynamodb.GetItemInput 呼叫 client.GetItem;key 值是來自 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 unmarshal 成一個單純的 Go struct,請使用 github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue 的 attributevalue.UnmarshalMap(搭配 dynamodbav struct tag)。
說明
TableName— 要讀取的表格;純量輸入欄位是指標,所以用aws.String(...)包裝字面值。Key— 必須包含每一個 primary-key 屬性:simple key 只需 partition key,composite key 則需 partition 與 sort key。GetItem不接受不完整的 key。ProjectionExpression— 選用;限制回傳哪些屬性(節省頻寬,而非讀取成本)。每個投影屬性都透過ExpressionAttributeNames以別名表示(#proj0…#proj3),讓像Year這樣的保留字保持安全。out.Item— 沒有任何項目符合時為nil;使用前務必先檢查。- 讀取預設為最終一致。設定
ConsistentRead: aws.Bool(true)以取得強一致讀取(花費 2× 的 RCU,僅限 base table)。
改用視覺化操作
手動組合投影或條件讀取?使用免費的 DynamoDB Expression Builder 組裝運算式,並複製確切的 ProjectionExpression / ExpressionAttributeNames 值。
想在 GUI 中瀏覽表格並執行 GetItem — key 表單、結果格線、一鍵複製產生的程式碼 — 下載 DynoTable。
相關範例
- 在 Java 中使用 DynamoDB GetItem — 以 AWS SDK for Java 2.x 執行相同的讀取。
- 在 Go 中使用 DynamoDB Query — 讀取整個 partition,而非單一項目。
- DynamoDB partition key 的運作方式 — 為什麼
GetItem需要完整的 key。 - DynamoDB ResourceNotFoundException — 這裡常見的第一個錯誤:表格名稱或 region 錯誤。
- "The provided key element does not match the schema" — 你傳入的 key 與表格的 key 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 官方文件。