2016-08-04 16 views
0

構造体にキャストされるクエリがあります。しかし、クエリで結果が返されない場合、応答はnullです。これを空の配列[]にするにはどうすればよいですか?応答時に空の構造体

_, err := dbmap.Select(&response.DevTeam, "SELECT * FROM DevTeam WHERE app_id = ? LIMIT ? OFFSET ?", a_id, limit, offset) 

応答なし結果:何の結果時に所望の応答を

{ 
    "data": null, 
    "meta": "success" 
} 

{ 
    "data": [], 
    "meta": "success" 
} 

はまだヌルを取得していない - 私の構造体のセットアップは次のとおりです。

type HttpResonse struct { 
    DevTeam []DevTeam `json:"data"` 
} 

私はresponse.DevTeam = []models.DevTeam{}を使用して下記に示唆したように、まだnullを取得しています。

応答部:

答えて

1
s.Count = int64(len(response.DevTeam)) 
c.JSON(httpcode, gin.H{"meta": s, "data": response.DevTeam}) 

null JSONオブジェクトとしてnil符号化されたスライスタイプの値。空でないスライスは、空の配列[]にマーシャリングされます。[]responseをマーシャリングする前に

DevTeamフィールドをチェックし、それがnilだ場合は、明示的に例えば、0長さでスライス値を設定します。

if response.DevTeam == nil { 
    response.DevTeam = []models.DevTeam{} 
} 

または代わりに、あなたのgin.Hラッパーを作成し、代わりに空のスライスを使用します後者がnilに等しい場合、response.DevTeamの値を有する。

この単純な例を参照してください:

type Pt struct { 
    DevTeam []string 
} 

p := Pt{} 
json.NewEncoder(os.Stdout).Encode(p) 

p.DevTeam = []string{} 
json.NewEncoder(os.Stdout).Encode(p) 

出力を(Go Playground上でそれを試してみてください):あなたはまだすべてを表示していない@ElliotReeve

{"DevTeam":null} 
{"DevTeam":[]} 
+0

は私のセットアップ –

+0

のために上記を参照してください。 '' meta ''はJSONの結果のどこから来ますか? – icza

+0

メタセクションとc.JSON出力を表示するように更新しました –