不能解散dynamodb属性

时间:2017-10-11 12:24:35

标签: amazon-web-services go amazon-dynamodb aws-sdk-go

我正在使用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返回为空?

我试图到处寻找,却找不到解决方案......

2 个答案:

答案 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表中将slugdestination定义/保存为String属性。

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

将打印更改为: -

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