Вернуть пустой список вместо нуля - PullRequest
0 голосов
/ 08 марта 2019

Я хочу изменить свою текущую функцию, чтобы она возвращала пустой список JSON, в настоящее время она возвращает nil.

Это мой текущий код:

func (s *Service) projectsGet(c *gin.Context) {
    var projects []*models.Project

    user := getUser(c)
    pag := models.NewPagination(c)

    ps, err := s.db.ProjectsGet(user.ID, &pag)
    if err != nil {
        apiError(c, http.StatusInternalServerError, err)
        return
    }

    projects = ps
    c.JSON(http.StatusOK, projects)
}

Я хочу вернуть [], как мне это сделать?

1 Ответ

4 голосов
/ 08 марта 2019
Срез

A nil кодирует объект null JSON.Это задокументировано в json.Marshal():

Значения массива и слайса кодируются как массивы JSON, за исключением того, что байт [] кодируется как строка в кодировке base64, а anil-срез кодируется как нулевое значение JSON .

Если вы хотите не-null пустой массив JSON, используйте не-nil пустой срез Go.

См. Этот пример:

type Project struct {
    Name string `json:"name"`
}

enc := json.NewEncoder(os.Stdout)

var ps []*Project
enc.Encode(ps)

ps = []*Project{}
enc.Encode(ps)

Вывод (попробуйте на Go Playground ):

null
[]

Так что в вашем случае убедитесь, что projects неnil, например:

projects = ps
if projects == nil {
    projects = []*models.Project{}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...