英文:
How to extract values from local context in gofiber
问题
我已经成功使用本地上下文和自定义中间件设置数据库查询结果。我正在尝试查看如何对用户进行身份验证,然后从数据库中获取他们的详细信息并将其注入到上下文中。这已经完成了。
在路由的最终方法中,本地数据实际上是一个接口,我想从先前的身份验证中间件设置的数据中提取字段。我该如何处理这个接口类型,以便将其转换为类似结构体或 JSON 的形式,以便获取字段和值以进行一些逻辑处理?
user := c.Locals("user")
fmt.Println("checking for locals", user)
从上面的代码中可以看出,user 是一个名为 user 的结构体。
{
Name string json:"name"
Email string json:"email"
ID string json:"id"
Password string json:"password"
}
我该如何获取姓名和电子邮件?
英文:
I have managed to use the local context to set database query results using a custom middleware. I am trying to see how I can authenticate a user then pull their details from the database and inject it to the context. This has been done.
The local data on the final method on the route is actually an interface and I would like to extract fields from the data I set from the previous auth middleware. How can I work with this interface type to some form like a struct or json so that I can get the fields and values for doing some logic?
user := c.Locals("user")
fmt.Println("checking for locals",user)
From above user is of struct user
{
Name string `json:"name"`
Emain string `json:"email"`
ID string `json:"id"`
Password string `json:"password"`
}
How can I get the name and email ?
答案1
得分: 4
所以在研究了Fiber文档并阅读了关于接口和空接口的内容后,我认为我有一个解决方案,但可能需要更正。
我看到可以将接口转换为具体类型。在我的情况下,我会取类型为var user interface{}
的c.Locals("user")
,然后将其转换为一个结构体,将用户模型的指针传递给它,如下所示:
user := c.Locals("user")
details, ok := user.(*models.User)
fmt.Println("checking for locals -----------", details.Name)
英文:
So after digging into the fiber docs and reading about interfaces and especially empty interfaces I think I have a solution but stand to be corrected
I saw one can cast an interface to a concrete type. In my case I would take the c.Locals("user")
of type var user interface{}
then cast it to a struct passing the pointer to the user model as follows
user := c.Locals("user")
details, ok :=user.(*models.User)
fmt.Println("checking for locals -----------",details.Name)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论