Как опустить структуру поля

Как я могу опустить 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 ответа

  1. Добавить новую структуру, чем описать желаемую структуру
type LoginFormResponse struct {
    Login    string `json:"name"`
    Password string `json:"-"`
}
  1. Перерабатывать
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, чтобы справиться с этим. Это отличная библиотека!

Другие вопросы по тегам