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 conaws.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.GetItemno 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) medianteExpressionAttributeNames, lo que mantiene a salvo palabras reservadas comoYear.out.Item—nilcuando 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
- DynamoDB GetItem en Java — la misma lectura con AWS SDK para Java 2.x.
- DynamoDB Query en Go — lee una partición entera en lugar de un solo item.
- Cómo funcionan las claves de partición de DynamoDB — por qué
GetItemnecesita la clave completa. - DynamoDB ResourceNotFoundException — el primer error habitual aquí: nombre de tabla o región incorrectos.
- "The provided key element does not match the schema" — la clave que pasas no coincide con el esquema de clave de la tabla.
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
Verificado por última vez el 2026-07-13 contra la documentación oficial de AWS enlazada arriba.