プログラマーへの道 #127 の補足説明
こんにちは、プログラマーVTuberの衣亥栖ティオです。
この記事はYouTubeに投稿した動画の補足ブログです。
投稿した動画
今回は以下の動画の補足説明をします。
GitHub のURL
私のGitHubは以下です。
https://github.com/tio-iis
Gist のURL
私のGitst(メモ書きみたいなもの)のURLは以下です。
https://gist.github.com/tio-iis
今回の動画で実装したソースコード
今回の実装部分は以下です。
https://github.com/tio-iis/memo-server/pull/41/files
現時点でのソースコードは以下です。
https://github.com/tio-iis/memo-server/tree/ccc99c104677e7e907f21db9a15f9156a3ff90e5
補足内容
Go言語におけるインターフェースについて
動画内でも言及した通り、Go言語にはインターフェースという仕組みがあります。
https://thiscalifornianlife.com/2021/01/10/golang-interface/
今後の動画で利用する予定なので、今は覚えなくてもいいと思います。
HTTP Status 500 について
説明は以下です。
https://developer.mozilla.org/ja/docs/Web/HTTP/Status/500
特定のケースを除いて、サーバ側でエラーが発生した場合は基本的に 500 を利用します。 今後の動画でもしばらくは 500 のみ利用することになりそうです。 HTTP Status 500 は HTTP Status 400 と並んでよく使うステータスなので覚えておくといいですね。
json.Marshal() が現実的にエラーにならないという点について
動画内ではエラーレスポンス用の構造体をJSONに変換する場合に、エラーになることはないという説明をしました。
以下の部分ですね。
https://github.com/tio-iis/memo-server/pull/41/files#diff-2873f79a86c0d8b3335cd7731b0ecf7dd4301eb19a82ef7a1cba7589b5252261R140
json.Marshal() がエラーになるケースはいくつかあります。
https://orisano.hatenablog.com/entry/2020/08/01/222730
一番わかりやすいのはJSONに変換できない構造体(値)を引数に指定した場合でしょうか。
例が以下に載っています。
https://stackoverflow.com/questions/33903552/what-input-will-cause-golangs-json-marshal-to-return-an-error
エラーレスポンス用の構造体は以下のような定義になっていますが、 構造体と文字列で構成されているものなので、json.Marshal() で変換できないことはありません。 JSONに変換する対象が固定されていて、エラーが発生しないことは curl を利用した動作確認で確認済みなので、"現実的に発生しない" という判断をしました。
type ErrorMessage struct { Code string `json:"code"` Messsage string `json:"message"` } type ErrorResponse struct { Errors []ErrorMessage `json:"errors"` }