Как опустить структуру поля
Как я могу опустить 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",
})
3 ответа
- Добавить новую структуру, чем описать желаемую структуру
type LoginFormResponse struct {
Login string `json:"name"`
Password string `json:"-"`
}
- Перерабатывать
return c.JSON(http.StatusOK, map[string]interface{}{
"user": LoginFormResponse(*data),
"token": "slkdfj",
})
вы можете создать вспомогательный пакет для обработки ответа 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)
Я думаю, вы пытаетесь решить проблему неверным способом.
Лучшая практика при создании API - иметь для этого две структуры. Один для полей запроса, один для полей ответа. Как это:
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, чтобы справиться с этим. Это отличная библиотека!