2017-08-22 62 views
0
// 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タイプで何かが間違っていますが、これを行う正しい方法を理解できません、助けてください。aws-go-sdkを使用したアンマーシャリングマップ

答えて

2

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

+0

あなたはまず、彼らは同様に、エクスポートしていることを確認するために大文字フィールドの文字を作る必要があります!しかし、いくつかの警告やエラーはここに投稿してはいけませんか?私はドキュメントがこれについて何も言わなかったことを意味します.... – FrontMage

+0

構造体の値を別のものに取り出す便利な方法があるのだろうかと思います。 – FrontMage

+0

@FrontMage最初の文字が大文字である必要がある理由は、最初の文字が大文字でない場合、別のパッケージのGoライブラリが別のパッケージのメンバ、メソッド、型、または値にアクセスできないことです。すべてのGoマーシャリングライブラリで同じ動作が表示されます。 –

関連する問題