我有以下结构:

type User struct {
  ID       string    `json:"id"`
  Name     string    `json:"name"`
  LastName string    `json:"lastName"`
  User     string    `json:"user"`
  Password string    `json:"password"`
  Vehicles []Vehicle `json:"vehicles"`
}
type Vehicle struct {
  Plate string `json:"plate"`
}

我想在我的DynamoDB中存储一系列Vehicles。我做了一些研究,发现应该使用以下代码:
input := &dynamodb.PutItemInput{
    TableName: aws.String(tableUsers),
    Item: map[string]*dynamodb.AttributeValue{
        "id": {
            S: aws.String(fmt.Sprintf("%v", uuid)),
        },
        "name": {
            S: aws.String(user.Name),
        },
        "lastName": {
            S: aws.String(user.LastName),
        },
        "user": {
            S: aws.String(user.User),
        },
        "password": {
            S: aws.String(user.Password),
        },
        "vehicles": {
            L: [{
                M: {
                    "plate": {S: aws.String("test")},
                },
            }],
        },
    },
}

但是我在以下方面一直存在语法错误:
L: [{
    M: {
        "plate": {S: aws.String("test")},
    },
}],

我究竟做错了什么?

最佳答案

如果您查看dynamodb的godoc:https://docs.aws.amazon.com/sdk-for-go/api/service/dynamodb/#AttributeValue

您可以看到字段L具有以下类型:[] * AttributeValue

创建 slice 凋落物时,应指定其类型。
所以对你来说是:

L: []*dynamodb.AttributeValue{
  {
    M: map[string]*dynamodb.AttributeValue{
      "plate": {S: aws.String("test")}
    }
  }
}

如果您想更好地理解struct,slice和map,可以阅读以下文章:
  • https://blog.golang.org/go-slices-usage-and-internals
  • https://blog.golang.org/go-maps-in-action
  • 关于amazon-web-services - 如何将数组存储到dynamoDB表中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60580541/

    10-17 01:31