2017-05-22 3 views
1

は、だから私は今、私はこのコードで空の配列をエンコードするjsonがnullを返すのはなぜですか?

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) 
    } 
} 

のような何かをするハンドラをこの

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 

のような種類がありますしているこれは、実際の行がある場合は正常に動作しますが、空の配列をコードしているときtextTagRelationships 、クロームコンソールの私の応答で私はnullを得る。なぜこうなった? textTagRelationshipsは実際には[]なので、[]をエンコードするエンコードと、[]のレスポンスが必要です。

+1

「textTagRelationships」のようなサウンドは 'nil'です。 – user2357112

+0

まあ、何も起こりません。それはちょうど誘惑された。そして私がそれをプリントアウトすると、私は空の配列をプリントアウトします。 – praks5432

+0

それは宣誓されていますが、initedされていません。 'var thing [] type'は' [] type'型の 'nil'を返します。 'thing:= make([] type、len)'は '[] type'と長さ' len'のスライスを与え、 'var thing [len] type'は長さが' type 'は 'type'のゼロ値で埋められます。 – Adrian

答えて

関連する問題