2017-10-11 6 views
0

J'expérimente avec AWS-SDK-GO avec l'API DynamoDB ...attribut Cant unmarshall de DynamoDB

J'essaie d'interroger la db et retourner une chaîne. Mais je vais avoir quelques problèmes unmarshelling la valeur de retour ....

struct

type Item struct { 
    slug string 
    destination string 
} 

fonction de requête

input := &dynamodb.GetItemInput{ 
    Key: map[string]*dynamodb.AttributeValue{ 
     "slug": { 
      S: aws.String(slug), 
     }, 
    }, 
    TableName: db.TableName, 
} 

result, err := db.dynamo.GetItem(input) 
if err != nil { 
    return "", err 
} 

n := Item{} 
err = dynamodbattribute.UnmarshalMap(result.Item, &n) 

if err != nil { 
    log.Printf("Failed to unmarshal Record, %v", err) 
    return "", err 
} 
log.Printf("dump %+v", n) 
log.Printf("echo %s", n.slug) 
log.Printf("echo %s", n.destination) 
log.Printf("orig %v", result.Item) 

résultat

2017/10/11 14:21:34 dump {slug: destination:} 
2017/10/11 14:21:34 echo 
2017/10/11 14:21:34 echo 
2017/10/11 14:21:34 orig map[destination:{ 
    S: "http://example.com" 
} slug:{ 
    S: "abcde" 
}] 

Pourquoi article retourné vide ?

J'ai essayé de regarder partout mais trouver aucune solution ....

+0

quel est le type de données de destination d'attribut dans le tableau de DynamoDB? – notionquest

+0

Chaîne les deux, comme la structure – Pedro

+0

Avez-vous essayé la solution ci-dessous? – notionquest

Répondre

0

Je trouve cette question et semble être lié, unmarsheling un attribut spécifique de la struct semble le faire.

https://github.com/aws/aws-sdk-go/issues/850

Exemple

var item Item 
if err = dynamodbattribute.Unmarshal(result.Item["destination"], &item.destination); err != nil { 
    log.Printf("UnmarshalMap(GetItem response) err=%q", err) 
} 
0

Je ne sais pas si vous avez essayé. Je pense que si vous pouvez changer la structure comme mentionné ci-dessous, cela peut résoudre le problème.

J'ai supposé que slug et destination sont définis/enregistrés en tant qu'attribut de chaîne dans la table DynamoDB.

type Item struct { 
    Slug string`json:"slug"` 
    Destination string`json:"destination"` 
} 

l'impression à changement: -

log.Printf("echo %s", n.Slug) 
log.Printf("echo %s", n.Destination)