使用aws-go-sdk进行UnmarshalMap操作。

huangapple go评论114阅读模式
英文:

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 类型有问题,但是找不到正确的解决方法,请帮忙。

英文:
// 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
}

Why is this not working? It did not throw any error, just not working...
My guess is something wrong with my UserInfo type, but can't figure the right way to do this, help, please.

答案1

得分: 4

在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

英文:

In Go, a name is exported if it begins with a capital letter. You should make first letters of fields UPPERCASED to make sure they're exported, like:

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

more info: https://www.goinggo.net/2014/03/exportedunexported-identifiers-in-go.html

huangapple
  • 本文由 发表于 2017年8月22日 11:21:12
  • 转载请务必保留本文链接:https://go.coder-hub.com/45808394.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定