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

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

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

こんにちは、プログラマーVTuberの衣亥栖ティオです。
今回は以下の動画の補足説明をします。 動画内で実装したソースコードも載せています。


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

前回との差分は以下です。

https://github.com/tio-iis/memo-server/pull/8/files

動画時点の全体ソースコードは以下です。

https://github.com/tio-iis/memo-server/tree/e8268f4554e6642675346231986272aab8773a77

変数定義ミスについて

動画内で変数定義によるエラーが発生していました。 発生箇所は以下です。

memos[m.ID] = m

なぜエラーが発生していたのかというと、memosという変数がnilだったからです。 memosは以下のように定義されていたのですが、この定義方法だとmemosの値はnilになっています。

var memos map[string]*Memo

nilの変数に対して以下のようにm.IDというキーを指定しているので、「nilにキーを指定することはできません」というエラーが発生します。

memos[m.ID] = m

このエラーは以下のように空のmemosを代入してあげることで回避することができます。 空のmemosを代入してあげるとキーを指定できます。

var memos map[string]*Memo = map[string]*Memo{}

空のmemosという概念が分かりづらいかもしれませんが、intで考えると理解しやすいかもしれません。 以下のようにint型の変数であるnumberを定義すると、空のintである 0 がセットされることになります。

var number int

以下のようにstringの変数であるstrを定義すると、空のstringである空文字がセットされることになります。

var str string

今回はmap型の変数ですが、map型の場合はnil がセットされます。

URLの変更について

動画内で画面を表示するためのURLを変更しました。 以下のURLを・・・

http.HandleFunc("/", showScreen)

以下の変更しました。

http.HandleFunc("/top", showScreen)

こちらですが、私の勘違いで変更してしまっただけで、本来は変更する必要がありませんでした。 この変更に関しても動画内で説明しようと思います。