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 com aws.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. GetItem nã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) via ExpressionAttributeNames, o que mantém palavras reservadas como Year seguras.
  • out.Itemnil quando 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

References

Última verificação em 2026-07-13 contra a documentação oficial da AWS vinculada acima.

Trabalhe com o DynamoDB sem o Console

O DynoTable é um cliente desktop rápido para o DynamoDB — navegue pelas tabelas, execute consultas no estilo SQL e edite itens localmente.