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

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

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

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

投稿した動画

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


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

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

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

補足内容

Go言語の構造体について

Go言語の構造体はJavaScriptのクラスのように値をまとめて管理できる仕組みです。
https://go-tour-jp.appspot.com/moretypes/2

メソッドを持つこともできます。 メソッドの定義で特徴的なのが "レシーバ" と言われるものです。 これはJavaScriptにおける this と同じような使い方をする引数のようなものです。
https://go-tour-jp.appspot.com/methods/1

Go言語のコンストラクタについて

Go言語にはコンストラクタという機能が存在しません。 代わりに関数を利用して構造体のオブジェクトを生成します。
http://www.golangpatterns.info/object-oriented/constructors

日本語の記事は以下です。
https://qiita.com/Sekky0905/items/10c8ae9cee719d66fa84

Go言語の配列について

動画内でstringの配列を扱いましたが、実はGo言語には配列(Array)とスライス(Slice)という似たようなデータ構造が存在します。 動画内で利用したのはstringの配列ではなく、stringのスライスです。
https://qiita.com/YumaInaura/items/aec7857518102ff5e27c

配列とスライスの違いはいくつかありますが、大きな違いは "格納できる要素を増やせるかどうか" です。

配列は定義する際に格納できる要素の数を指定する必要があるので、指定した以上の要素を追加することはできません。
https://qiita.com/YumaInaura/items/aec7857518102ff5e27c#%E8%A6%81%E7%B4%A0%E3%81%AE%E8%BF%BD%E5%8A%A0

一方でスライスは定義する際に格納できる要素を指定する必要はありません。 格納できる数は必要に応じて増えていきます。 スライスの方が便利なので、動画ではほぼスライスしか使わないと思います。

動画内では、スライスの変数を定義する際に make() という関数を使いました。
https://github.com/tio-iis/memo-server/pull/37/files#diff-2873f79a86c0d8b3335cd7731b0ecf7dd4301eb19a82ef7a1cba7589b5252261R52

errMsgs := make([]string, 0)

make() についての説明は以下ですが、 とりあえず「スライスを定義するときには make() を利用する」という感じで覚えてもらえればいいかなと思います。
https://go-tour-jp.appspot.com/moretypes/13

make() の引数は全部で3つ指定することができます。 それぞれ以下のような説明になります。

第一引数 ... 作成するスライスの型
第二引数 ... スライスを作成するときに確保する "格納できる要素の数"
第三引数 ... スライスが格納できる要素の最大数(指定しない場合は上限なしになる

これらの説明としては以下の記事が分かりやすいですが、少し難しいかもしれません。
https://qiita.com/hitode7456/items/562527069e13347b89c8

理解するのが難しい場合は「とりあえず第一引数と第二引数を指定する。第二引数には常に 0 を指定する。」という風に覚えてもらえればいいかなと思います。