読者です 読者をやめる 読者になる 読者になる

@Konboi memo

主に技術に関してつらつらと。

GolangでレスポンスにJSONで返す

はじめに

railsとかだと render json: HASH とかでよしなにjson形式にして返してくれるんですが、 goだと結構嵌ったのでメモ。

今回はサンプルで /pingにアクセスすると

{
  status: 200,
  result: “ok”
}

というjsonを返す例を作ってみたいと思います。

jsonで返すレスポンスを定義する

まずは、どんなレスポンスを返すかを定義する

今回は status が 数字 result が文字列 なので下記のようになると思います。

type Ping struct {
    Status int 
    Rssult string
}

jsonを返すhandlerを定義する

func pingHandler(w http.ResponseWriter, r *http.Request) {
     ping := Ping{http.StatusOK, "ok"}

     res, err := json.Marshal(ping)

     if err != nil {
         http.Error(w, err.Error(), http.StatusInternalServerError)
         return
     }

     w.Header().Set("Content-Type", "application/json")
     w.Write(res)
 }

 func main() {
     http.HandleFunc("/ping", pingHandler)
     http.ListenAndServe(":8000", nil)
}

…

json.Marshaljson形式に変換指定ます。 ※ http.StatusOK == 200

実際にアクセスしてみる

では実際にアクセスしてみます。

img

お!! でき…てない…

惜しい。

jsonのkeyが大文字になっているので修正します。

 type Ping struct {
     Status int    `json:"status"`
     Result string `json:"result"`
 }

このようにjsonの時のkeyを指定できます

参考URL

まとめ

  • jsonの内容を型で指定してあるのよい。
  • RoRとかsinatraだとすぐにできるのでここまでやるのに結構苦戦した。

プログラミング言語Goフレーズブック

プログラミング言語Goフレーズブック

  • 作者: David Chisnall,デイビッド・チズナール,柴田芳樹
  • 出版社/メーカー: ピアソン桐原
  • 発売日: 2012/10/04
  • メディア: 単行本(ソフトカバー)
  • 購入: 1人 クリック: 5回
  • この商品を含むブログを見る

はじめての「Go言語」 (I・O BOOKS)

はじめての「Go言語」 (I・O BOOKS)