簡體   English   中英

返回空列表而不是 null

[英]Return empty list instead of null

我想更改我當前的函數以返回空的 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)
}

我希望它返回[] ,我該怎么做?

一個nil切片編碼為一個null JSON 對象。 這記錄在json.Marshal()

數組和切片值編碼為 JSON 數組,除了 []byte 編碼為 base64 編碼字符串,而nil 切片編碼為空 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{}
}

處理此問題的另一種方法是檢查切片是否為 nil 並對其進行初始化:

projects = ps
if projects == nil {
    projects = make([]*models.Project, 0)
}

如果您有多個結構體和帶有數組的結構體,這可能會很乏味。 為了處理這些,您可以創建自定義封送拆收器或動態檢查字段。

來源: Go 中的數組和 JSON

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM