DynamoDB GetItem em Go (AWS SDK v2)
GetItem lê um único item pela sua chave primária completa. No AWS SDK for Go v2 você chama client.GetItem com um dynamodb.GetItemInput; os valores de chave são membros tipados do pacote types (&types.AttributeValueMemberS{...} para strings, ...MemberN para números).
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)
}Para fazer unmarshal de out.Item em uma struct Go simples, use attributevalue.UnmarshalMap de github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue (com tags de struct dynamodbav).
Explicação
TableName— a tabela de onde ler; campos escalares de entrada são ponteiros, então envolva literais comaws.String(...).Key— deve incluir todos os atributos da chave primária: apenas a chave de partição para uma chave simples, ou chave de partição e chave de classificação para uma chave composta.GetItemnão aceita uma chave parcial.ProjectionExpression— opcional; limita quais atributos retornam (economiza banda, não o custo de leitura). Cada atributo projetado recebe um alias (#proj0…#proj3) viaExpressionAttributeNames, o que mantém palavras reservadas comoYearseguras.out.Item—nilquando nenhum item corresponde; sempre verifique antes de usá-lo.- Por padrão as leituras têm consistência eventual. Defina
ConsistentRead: aws.Bool(true)para uma leitura com consistência forte (custa 2× as RCU, apenas na tabela base).
Faça visualmente
Montando a projeção ou uma leitura condicional na mão? Use o DynamoDB Expression Builder gratuito para montar a expressão e copiar os valores exatos de ProjectionExpression / ExpressionAttributeNames.
Para navegar em tabelas e executar GetItem numa GUI — formulário de chave, grade de resultados, cópia em um clique do código gerado — baixe o DynoTable.
Exemplos relacionados
- DynamoDB GetItem em Java — a mesma leitura com o AWS SDK for Java 2.x.
- DynamoDB Query em Go — leia uma partição inteira em vez de um único item.
- Como funcionam as partition keys do DynamoDB — por que
GetItemprecisa da chave completa. - DynamoDB ResourceNotFoundException — o primeiro erro comum aqui: nome de tabela ou region errados.
- "The provided key element does not match the schema" — a chave que você passa não corresponde ao key schema da tabela.
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
Última verificação em 2026-07-13 contra a documentação oficial da AWS vinculada acima.