【发布时间】:2016-08-01 03:58:17
【问题描述】:
我在我的 gorilla 会话中创建了一个用户条目
session.Values["ub"] = ub
但是,当我提取时,提取的接口正在获取值,但是当我将数据类型断言到我的用户结构中时,它显示为 null。
我不明白这背后的原因,因为当我使用其他结构运行相同的代码时,它工作正常。可能是什么原因以及如何解决这个问题。
val := session.Values["ub"]
var ub = &UserBasic{}
var ok bool
if val != "" {
//type assertion
//var userBasic = &auth.UserBasic{}
ub, ok = val.(*UserBasic)
if !ok {
// Handle the case that it's not an expected type
log.Infof(ctx, "GetUserGSession: UserBasic structure value %+v", ub)
log.Infof(ctx, "GetUserGSession: Value got from session %+v", val)
log.Infof(ctx, "GetUserGSession: reasserting %+v", val.(UserBasic))
}
return ub
} else {
ub := new(UserBasic)
return ub
}
*********结果************
2016/08/01 03:49:12 INFO: GetUserGSession: UserBasic structure value <nil>
2016/08/01 03:49:12 INFO: GetUserGSession: Value got from session {UserID:589578337 UserName:ds Name:ds createdAt:{sec:0 nsec:0 loc:<nil>} defaultProfileImage:false description: FavouritesCount:5 FollowersCount:0 FriendsCount:0 TotalTweets:6 ListedCount:0 Location: ProfileBgColor: ProfileBgImgURL: ProfileImgURL: IsLoggedIn:true TimeZone:}
2016/08/01 03:49:12 INFO: GetUserGSession: reasserting {UserID:589578337 UserName:ds Name:ds createdAt:{sec:0 nsec:0 loc:<nil>} defaultProfileImage:false description: FavouritesCount:5 FollowersCount:0 FriendsCount:0 TotalTweets:6 ListedCount:0 Location: ProfileBgColor: ProfileBgImgURL: ProfileImgURL: IsLoggedIn:true TimeZone:}
【问题讨论】:
-
试试这个:
ub, ok = val.(UserBasic)而不是ub, ok = val.(*UserBasic) -
我通过在各处删除指针来修复它。你提出了同样的建议。但是我不明白为什么当“val”具有价值时“ub”没有得到价值。类型断言有什么例外吗?
标签: google-app-engine session go