こんにちは、プログラマー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 に修正しようと思います。