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 구조체 태그)을 사용하세요.
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을 다운로드하세요.
Related examples
- DynamoDB GetItem in Java — AWS SDK for Java 2.x를 사용한 동일한 읽기.
- DynamoDB Query in Go — 항목 하나 대신 파티션 전체를 읽기.
- How DynamoDB partition keys work —
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.