gpt4 book ai didi

go - 如何在 Controller 访问的中间件中使用保存在上下文中的 "type struct"

转载 作者:IT王子 更新时间:2023-10-29 02:27:16 26 4
gpt4 key购买 nike

这是我关于 GoLang 的第一个问题,请保持温和。我正在构建一个测试 JSON API。

我有一个名为 Usertype struct

type User struct {
UserID int
Email string
FirstName string
LastName string
PasswordHash string
}

在中间件中,我验证 JWT token 是否有效,如果有效,我加载用户的整个记录​​并将其保存在上下文中,以便它在下面的处理程序中可用。

所以在中间件中,我这样保存用户结构

    context.Set(r, "User",  *User)
fmt.Println(*User)

next.ServeHTTP(w, r)

Println 的输出是

{12 sallu@domain.com.au Sallu 先生 $2a$14oUg3d1rm./.B/vUyhYR9/hlHfagE4tGicNc14EWK3u }

然后在最终处理程序中,我访问此上下文并获取用户对象。

User    := context.Get(r, "User")

fmt.Println("---User---", fmt.Sprintf(" %T ", User))
fmt.Println(User)

Println 的输出是

---User---  models.User
{12 sallu@domain.com.au Mr. Sallu $2a$14oUg3d1rm./.B/vUyhYR9/hlHfagE4tGicNc14EWK3u }

问题是当我在 Controller 中访问 User.Email 时出现错误

User.Email undefined (type interface {} is interface with no methods)

我该如何解决这个问题……?我想使用 User.Email 或 User.UserID。似乎上下文正在对它做些什么。

请帮忙

最佳答案

请在代码中的所有地方为变量和类型使用不同的名称。

例如保留类型 User 和变量 user

在您的 Controller 中,将您的 user 断言返回给 User

if u, ok := user.(User); ok {
fmt.Println(u.Email)
}

https://tour.golang.org/methods/15

关于go - 如何在 Controller 访问的中间件中使用保存在上下文中的 "type struct",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48576905/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com