我正在使用DynamoDB API试验AWS-SDK-GO ......
我试图查询数据库并返回一个字符串。但我有一些问题没有说明回报价值......
结构
type Item struct {
slug string
destination string
}
查询功能
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)
结果
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"
}]
为什么将Item返回为空?
我试图到处寻找,却找不到解决方案......
答案 0 :(得分:0)
我发现这个问题并且似乎是相关的,解构结构的特定属性似乎是这样做的。
https://github.com/aws/aws-sdk-go/issues/850
实施例
var item Item
if err = dynamodbattribute.Unmarshal(result.Item["destination"], &item.destination); err != nil {
log.Printf("UnmarshalMap(GetItem response) err=%q", err)
}
答案 1 :(得分:0)
我不确定你是否尝试过这个。我想如果你可以改变下面提到的结构,它可以解决问题。
我假设在DynamoDB表中将slug
和destination
定义/保存为String属性。
type Item struct {
Slug string`json:"slug"`
Destination string`json:"destination"`
}
将打印更改为: -
log.Printf("echo %s", n.Slug)
log.Printf("echo %s", n.Destination)