我有这样一种类型
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
实际上是一个[]
,因此我期望编码会将一个[]
编码并且我的响应会有一个[]
。
textTagRelationships
是nil
。 - user2357112var thing []type
会给你一个类型为[]type
的nil
。thing := make([]type, len)
会给你一个类型为[]type
且长度为len
的切片,而var thing [len]type
会给你一个长度为len
、类型为[]type
且填充有type
零值的数组。 - Adrian