UnmarshalMap 使用 aws-go-sdk

UnmarshalMap using aws-go-sdk

// UserInfo 用来解构返回的数据
type UserInfo struct {
    gender     string            `dynamo:"gender"`
    product    string            `dynamo:"product"`
    id         string            `dynamo:"id"`
    createTime int               `dynamo:"create_time"`
    name       string            `dynamo:"name"`
}

// GetUserInfoByID 根据userId在supe_user表取回用户信息
func GetUserInfoByID(userId string) (UserInfo, error) {
    queryInput := dynamodb.GetItemInput{
        Key: map[string]*dynamodb.AttributeValue{
            "userId": {
                S: aws.String(userId),
            },
        },
        TableName: aws.String("user"),
    }
    result, err := dbsession.DynamoDB.GetItem(&queryInput)
    userInfo := UserInfo{}
    if err != nil {
        fmt.Println(err.Error())
        return userInfo, err
    }
    unmarshalMapErr := dynamodbattribute.UnmarshalMap(result.Item, &userInfo)
    if unmarshalMapErr != nil {
        return userInfo, err
    }
    fmt.Println(result.Item)
    fmt.Println(userInfo.name)
    return userInfo, nil
}

为什么这不起作用?它没有抛出任何错误,只是不工作...... 我的猜测是我的 UserInfo 类型有问题,但无法找到正确的方法,请帮忙。

在 Go 中,如果名称以大写字母开头,则会被导出。您应该将字段的首字母大写以确保它们被导出,例如:

type UserInfo struct {
    Gender     string            `dynamo:"gender"`
    Product    string            `dynamo:"product"`
    Id         string            `dynamo:"id"`
    CreateTime int               `dynamo:"create_time"`
    Name       string            `dynamo:"name"`
}

更多信息:https://www.goinggo.net/2014/03/exportedunexported-identifiers-in-go.html