这是关于GoLang的第一个问题请温柔.我正在构建一个测试JSON API.
我有一个名为User的类型结构
type User struct {
UserID int
Email string
FirstName string
LastName string
PasswordHash string
}
Run Code Online (Sandbox Code Playgroud)
在中间件中,我验证JWT令牌是否有效,如果是,我加载用户的整个记录并将其保存在上下文中,以便在下面的处理程序中可用.
所以在中间件中,我像这样保存User struct
context.Set(r, "User", *User)
fmt.Println(*User)
next.ServeHTTP(w, r)
Run Code Online (Sandbox Code Playgroud)
Println的输出是
{12 sallu@domain.com.au Mr. Sallu $2a$14oUg3d1rm./.B/vUyhYR9/hlHfagE4tGicNc14EWK3u }
然后在最终的处理程序中,我访问此上下文并获取User对象.
User := context.Get(r, "User")
fmt.Println("---User---", fmt.Sprintf(" %T ", User))
fmt.Println(User)
Run Code Online (Sandbox Code Playgroud)
Println的输出是
---User--- models.User
{12 sallu@domain.com.au Mr. Sallu $2a$14oUg3d1rm./.B/vUyhYR9/hlHfagE4tGicNc14EWK3u }
Run Code Online (Sandbox Code Playgroud)
问题是,当我访问User.Email时,我在控制器中收到错误
User.Email undefined (type interface {} is interface with no methods)
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题..?我想使用User.Email或User.UserID.好像上下文正在做些什么.
请帮忙
代码中的任何地方请为变量和类型使用不同的名称.
例如保持类型User和变量user.
在您的控制器中,键入断言user返回User.
if u, ok := user.(User); ok {
fmt.Println(u.Email)
}
Run Code Online (Sandbox Code Playgroud)
https://tour.golang.org/methods/15