DynamoDB GetItem en Go (AWS SDK v2)

GetItem lee un único item por su clave primaria completa. En AWS SDK para Go v2 llamas a client.GetItem con un dynamodb.GetItemInput; los valores de clave son miembros tipados del paquete 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 deserializar out.Item en una struct de Go plana, usa attributevalue.UnmarshalMap de github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue (con etiquetas de struct dynamodbav).

Explicación

  • TableName — la tabla de la que se lee; los campos de entrada escalares son punteros, así que envuelve los literales con aws.String(...).
  • Key — debe incluir cada atributo de la clave primaria: solo la clave de partición para una clave simple, o la clave de partición y la de ordenación para una clave compuesta. GetItem no acepta una clave parcial.
  • ProjectionExpression — opcional; limita qué atributos se devuelven (ahorra ancho de banda, no coste de lectura). Cada atributo proyectado lleva un alias (#proj0#proj3) mediante ExpressionAttributeNames, lo que mantiene a salvo palabras reservadas como Year.
  • out.Itemnil cuando ningún item coincide; compruébalo siempre antes de usarlo.
  • Por defecto las lecturas son con consistencia eventual. Pon ConsistentRead: aws.Bool(true) para una lectura con consistencia fuerte (cuesta 2× la RCU, solo en la tabla base).

Hazlo visualmente

¿Construyendo la proyección o una lectura condicional a mano? Usa el DynamoDB Expression Builder gratuito para montar la expresión y copiar los valores exactos de ProjectionExpression / ExpressionAttributeNames.

Para explorar tablas y ejecutar GetItem en una interfaz gráfica — formulario de clave, cuadrícula de resultados, copia del código generado con un clic — descarga DynoTable.

Ejemplos relacionados

References

Verificado por última vez el 2026-07-13 contra la documentación oficial de AWS enlazada arriba.

Trabaja con DynamoDB sin la Consola

DynoTable es un cliente de escritorio rápido para DynamoDB: explora tablas, ejecuta consultas estilo SQL y edita Items localmente.