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

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

プログラマーへの道 #128 の補足説明

こんにちは、プログラマー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/42/files

現時点でのソースコードは以下です。
https://github.com/tio-iis/memo-server/tree/9e6bbfffe2c21f32289defe57d5b1893b4c6ff3a

補足内容

構造体をポインタにするかどうかの基準について

私の動画では構造体を常にポインタで扱う方針に倒していますが、ポインタではない方がいいケースもあります。 判断基準は以下に載っています。
https://github.com/golang/go/wiki/CodeReviewComments#receiver-type

日本語訳は以下です。
https://qiita.com/knsh14/items/8b73b31822c109d4c497#receiver-type

本来であれば、このような基準を元に判断すべきですが、メモ帳アプリを作る程度では気にしなくて良い問題なので、一旦ポインタで扱おうと思っています。

関数とメソッドの命名について

関数とメソッドは「xxxをする」という処理を実行するための仕組みです。 なので、命名規則として動詞を先頭に持ってくるのが一般的です。 例えば"AddUser() = ユーザーを追加する", "DeleteUser() = ユーザーを削除する" という感じになります。 これは英語の文法としての正しさを意識する必要があるということです。

私が実装したエラーレスポンスを出力する関数は "ResponseError()" という名前でした。 Responseは名詞なので、動詞にする必要があります。 動詞にすると"RespondError() = エラーをレスポンスする(返す)"という意味になるので、より自然ですね。

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

プログラマーへの道 #126 の補足説明

こんにちは、プログラマー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/40/files

現時点でのソースコードは以下です。
https://github.com/tio-iis/memo-server/tree/3eaf57e377d5df600a08c90a3fe1a71b96902419

補足内容

Go言語における構造体、関数などの大文字小文字について

Go言語における大文字、小文字はパッケージレベルのアクセス制御に利用します。
https://qiita.com/ko-watanabe/items/875085780d2ad72fe6af

今後の動画で解説するので、今は大文字にしておけばいいと思います。

HTTP Response のフォーマットについて

エラー時のレスポンスにかぎらず、HTTP Response, HTTP Request は基本的に単語の先頭を小文字にします。 以下の各社のエラーレスポンスも小文字になっていますね。
https://qiita.com/suin/items/f7ac4de914e9f3f35884

Go言語におけるタグについて

動画内でも説明しましたが、Go言語の構造体はフィールドにタグをセットすることができます。 それによってフィールドに対して何かしらの操作をすることが可能になります。
https://qiita.com/itkr/items/9b4e8d8c6d574137443c

動画内で利用したJSONのフィールド名を設定する以外にも色々と設定が可能です。
https://dev.classmethod.jp/articles/struct-json/

プログラマーへの道 #125 の補足説明

こんにちは、プログラマー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/39/files

現時点でのソースコードは以下です。
https://github.com/tio-iis/memo-server/tree/7fee5c7ab2db905be0f44116a38d5f555044d824

補足内容

curl のオプションについて

動画内では -v オプションを利用して詳細情報を出力していました。 その他のオプションは以下にまとまっています。
https://qiita.com/shtnkgm/items/45b4cd274fa813d29539

HTTP Status の種類について

以下の記事で確認できます。
https://developer.mozilla.org/ja/docs/Web/HTTP/Status

プログラマーへの道 #124 の補足説明

こんにちは、プログラマーVTuberの衣亥栖ティオです。 この記事はYouTubeに投稿した動画の補足ブログです。

投稿した動画

今回は以下の動画の補足説明をします。


GitHub のURL

私のGitHubは以下です。
https://github.com/tio-iis

Gist のURL

私のGitstのURLは以下です。
https://gist.github.com/tio-iis

今回の動画で実装したソースコード

ソースコードはありません。

補足内容

各社のエラーレスポンス設計について

以下に各社のエラーレスポンス設計がまとめてあります。とても参考になるのでぜひ読んでみてください。
https://qiita.com/suin/items/f7ac4de914e9f3f35884

プログラマーへの道 #123 の補足説明

こんにちは、プログラマーVTuberの衣亥栖ティオです。 この記事はYouTubeに投稿した動画の補足ブログです。

投稿した動画

今回は以下の動画の補足説明をします。


GitHub のURL

私のGitHubは以下です。
https://github.com/tio-iis

Gist のURL

私のGitstのURLは以下です。
https://gist.github.com/tio-iis

今回の動画で実装したソースコード

ソースコードはありません。

補足内容

現在のバックエンドサーバのHTTPレスポンスにおけるHTTP Statusについて

現在のバックエンドサーバはエラー時にHTTP Statusを設定していません。 そもそもバックエンドサーバ側の処理でエラーになることを想定していないので、このような実装になっています。 しかし、動画で説明した通り、本来であればちゃんと実装すべきですね。

HTTP Status の種類について

HTTP Status の種類は以下です。バックエンドサーバからエラーを返す場合は適切なステータス(数字)を選択する必要がありますが、今はあまり気にしなくていいです。
https://developer.mozilla.org/ja/docs/Web/HTTP/Status

プログラマーへの道 #122 の補足説明

こんにちは、プログラマーVTuberの衣亥栖ティオです。 この記事はYouTubeに投稿した動画の補足ブログです。

投稿した動画

今回は以下の動画の補足説明をします。


今回の動画で実装したソースコード

runeのサンプルコードは以下です。
https://gist.github.com/tio-iis/75f317a6257a8242ad4b75c0a7a15658

メモ帳アプリの修正は以下です。
https://github.com/tio-iis/memo-server/pull/38/files

現時点でのメモ帳アプリの実装は以下です。
https://github.com/tio-iis/memo-server/tree/984260fbd42d4eb6715a88ef543562914cea8298

補足内容

rune型とは

rune型については公式のブログに説明があります。
https://go.dev/blog/strings

日本語のブログだと以下が詳しいと思います。rune型の説明に必要なUnicodeUTF-8についても説明があるので、(少し難しいですが)この記事を読めば理解できると思います。
https://qiita.com/seihmd/items/4a878e7fa340d7963fee

UnicodeUTF-8 の関係について

以下が詳しいと思います。
https://qiita.com/omiita/items/50814037af2fd8b2b21e