DynamoDB GetItem en Go (AWS SDK v2)
En AWS SDK for Go v2 un Item es un map[string]types.AttributeValue, y types.AttributeValue es una interfaz sellada: las únicas implementaciones son las diez structs AttributeValueMember* que trae el SDK. Escribir una clave con ellas es fácil. Leer los valores de vuelta es donde Go se separa de todos los demás SDK.
client.GetItem sigue queriendo la clave principal completa, igual que en todas partes.
Código
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)
}Explicación
- Los escalares son punteros —
TableName,ProjectionExpressionyConsistentReadson*stringy*boolpara que el SDK distinga «sin establecer» del valor cero.aws.String,aws.Boolyaws.Int32existen para eso y para nada más. - Los números llegan como cadenas —
AttributeValueMemberN.Valuees unstring, porque DynamoDB envía los números como cadenas por el cable. LeerYearsignificaout.Item["Year"].(*types.AttributeValueMemberN)y luegostrconv.Atoi. Usa la forma coma-ok de la aserción; la forma escueta entra en pánico cuando el atributo falta o es de otro tipo. attributevalue.UnmarshalMapes la salida — degithub.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue, mapea el Item entero sobre una struct con etiquetasdynamodbavy hace la conversión de cadena a número. Vale la pena recurrir a ella en cuanto un Item tiene más de un par de atributos.out.Itemesnilcuando no hay coincidencia, yerrtambién esnil.len(out.Item) == 0cubre tanto nil como vacío si no necesitas distinguirlos.- Compara los errores con
errors.As— Go v2 envuelve los fallos del servicio en un error de operación de Smithy, así que tantoerr == …como comparar cadenas sobreerr.Error()fallan en silencio. Declaravar nf *types.ResourceNotFoundExceptiony pasa su dirección. ConsistentRead: aws.Bool(true)duplica el coste de lectura y se rechaza en un GSI. Los alias#projde arriba tampoco son decoración:Yeares una palabra reservada, y una proyección que la nombre directamente se rechaza.
Hazlo visualmente
Traducir entre la forma AttributeValueMember* y JSON plano es un impuesto constante en Go. El conversor de DynamoDB JSON hace esa ida y vuelta en el navegador cuando solo necesitas leer o pegar un Item.
DynoTable muestra los Items como filas normales, y exporta la consulta que hay detrás de la cuadrícula como un programa de Go construido sobre estos mismos tipos del SDK v2. Descarga DynoTable.
Ejemplos relacionados
- DynamoDB GetItem en Java — la misma lectura con AWS SDK for 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 equivocados.
- "The provided key element does not match the schema" — la clave que pasas no coincide con el esquema de claves de la tabla.
Referencias
- 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-28 contra la documentación oficial de AWS enlazada arriba.