如果我登录用户并返回带有用户数据和令牌的响应,那么如何省略struct filed,但是在这种情况下,我需要删除密码字段,该怎么办?
type LoginFormData struct {
Login string `json:"name"`
Password string `json:"password"`
}
data := new(LoginFormData)
if err := c.Bind(data); err != nil {
return err
}
userData := data // omit password field
return c.JSON(http.StatusOK, map[string]interface{}{
"user": struct {
Password string `json:"-"`
*LoginFormData
}{
LoginFormData: userData,
Password: userData.Password,
},
"token": "slkdfj",
})
答案 0 :(得分:1)
type LoginFormResponse struct {
Login string `json:"name"`
Password string `json:"-"`
}
return c.JSON(http.StatusOK, map[string]interface{}{
"user": LoginFormResponse(*data),
"token": "slkdfj",
})
答案 1 :(得分:0)
您可以创建一个帮助程序包来处理 api 响应
例如: helper/response_formatter.go:
package helper
type Response struct {
Message string `json:"message"`
Data interface{} `json:"data"`
}
func ResponseFormatter(message string, data interface{}) Response {
response := Response{
Message: message
Data: data,
}
return response
}
然后在回声处理程序中:
response := helper.ResponseFormatter("authenticated", userData)
return c.JSON(http.StatusOK, response)
答案 2 :(得分:0)
我认为您试图以错误的方式解决问题。
构建 API 时的最佳实践是为此使用 2 个结构。一种用于请求字段,一种用于响应字段。像这样:
type LoginFormReq struct {
Login string `json:"name"`
Password string `json:"password"`
}
type LoginFormResp struct {
Login string `json:"name"`
Password string `json:"-"`
}
这有时会导致结构之间的大量数据复制,但这在 Go 开发中有点正常,并具有适当的关注点分离。我通常使用 https://github.com/jinzhu/copier 来处理这个。这是一个很棒的图书馆!