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

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

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

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

投稿した動画

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


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

前回からの差分は以下です。
https://github.com/tio-iis/memo-server/pull/36/files

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

補足内容

Go言語のmapについて

Go言語のmapの説明は以下にあります。
https://golang.hateblo.jp/entry/2019/10/07/202140

メモ帳アプリでは利用していませんが、JavaScriptにもmapはあります。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/map

Go言語で文字列の長さを取得する

Go言語には len() という関数が存在します。
https://pkg.go.dev/builtin#len

この関数は引数に指定した値の長さを取得する関数です。 上記のリンクにもありますが、String はバイト数を取得します。

Array: the number of elements in v.
Pointer to array: the number of elements in *v (even if v is nil).
Slice, or map: the number of elements in v; if v is nil, len(v) is zero.
String: the number of bytes in v.
Channel: the number of elements queued (unread) in the channel buffer;
         if v is nil, len(v) is zero.

バイト数というのは文字数ではなく、データの大きさのことです。 そのため、 動画内で実装した len() を利用してタイトルの文字数をチェックするバリデーションは、実は間違った実装になります。 正しく文字数を取得するには rune を利用します。
https://mebee.info/2021/04/15/post-22996/

動画の内容を簡単にするために、あえて len() を利用しましたが、今考えると間違った実装を説明するのは失敗だったかなと思っています。 どこかのタイミングで len() を rune に修正しようと思います。