技術向上

プログラミングの学び、気になるテクノロジーやビジネストレンドを発信

POSTなどの際、JSONの形式をチェックしつつも、bodyの指定は任意とする方法【Go】

POSTでbodyの入力を任意としたいけど、JSONの形式がちゃんとあっているかエラーハンドリングしたい場合。

func decodeJSON(r *http.Request, dst interface{}) error {
    dec := json.NewDecoder(r.Body)
    return dec.Decode(dst)
}

create(w http.ResponseWriter, r *http.Request) {
  if err := decodeJSON(r, &param); err != nil && err != io.EOF {
      // エラーハンドリング
        return
    }
  // 何かしらの処理
}


ポイントは、decodeJSONが返す、JSON形式のエラーチェックの他に、io.EOFのエラーでないことをチェックしている点です。

io.EOFは、内容の終端でないかをチェックするものですが、このエラーの場合、bodyが指定されていないことになります。
そのエラーではないことを確認することで、bodyの指定を任意とすることができるのです。