プログラマー VTuber 衣亥栖ティオのちょっとした話

Youtubeに投稿したプログラミング学習動画の補足説明をするためのブログです。

プログラマーへの道 #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"`
}