为什么在代码中将空数组进行json编码会返回null?

9

我有这样一种类型

type TextTagRelationship struct {
  Id int64 `json:"id"`
  TagId int64 `json:"tag_id"`
  TaggedText string `json:"tagged_text"`
  TagName string `json:"tag_name"`
  PageNumber int64 `json:"page_number"`
  Color string `json:"color"`
}

type TextTagRelationships []TextTagRelationship

现在,我有一个处理程序,做的事情是这样的:
func getTaggedTextForPage(w http.ResponseWriter, r *http.Request) {
    vars := mux.Vars(r)
    pageNumber, err := strconv.ParseInt(vars["pageNumber"], 10, 64)
    check(err)
    defer r.Body.Close()
    rows, err := db.Query("SELECT * from tagged_text WHERE page_number = ?", pageNumber)
    check(err)
    var textTagRelationships []TextTagRelationship
    var textTagRelationship TextTagRelationship
    for rows.Next() {
        //execute sql code here
        textTagRelationships = append(textTagRelationships, textTagRelationship)
    }


    if err := json.NewEncoder(w).Encode(textTagRelationships); err != nil {
        check(err)
    }
}

如果有实际的行,这样做就很好,但是当对一个空数组textTagRelationships进行编码时,在Chrome控制台中我的响应会得到一个null。为什么会发生这种情况?看起来textTagRelationships实际上是一个[],因此我期望编码会将一个[]编码并且我的响应会有一个[]


1
似乎 textTagRelationshipsnil - user2357112
好的,它什么也不会发生。它只是被初始化了。当我打印它时,我打印出一个空数组。 - praks5432
1
它被声明了,但未初始化。var thing []type会给你一个类型为[]typenilthing := make([]type, len)会给你一个类型为[]type且长度为len的切片,而var thing [len]type会给你一个长度为len、类型为[]type且填充有type零值的数组。 - Adrian
1个回答

12

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接