[英]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.