2017-08-22 80 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類型有問題,但無法找到正確的方法來做到這一點,請幫助。UnmarshalMap使用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編組庫中看到相同的行爲。 –