Backend day5
今回は日にちが空いてしまった事もあり、復習、内容の理解を深める目的でポインターをサラッと確認し、苦戦していた内部パッケージの参照が出来ればなと思う。
refs https://qiita.com/Sekky0905/items/447efa04a95e3fec217f
アドレス
アドレスとはそもそも何か、コンピュータがプログラミングによって動作するのは、何も魔法の力で動いているのでは無く、メモリに情報が格納されそれらを計算し、動作させている。そのメモリに格納する段階で、プログラミングの各変数は番号付けされた、一意な場所に情報が格納されている。それが、アドレスである。
ポインタ
ポインタは前述したアドレスを情報をもっている変数の事で、変数 x のポインタは &xで参照出来る。
ポインタ変数
ポインタ変数は*x とアスタリスクを変数の前に付ける事で宣言出来る。
何が良いのか(参照渡し、値渡し)
ポインタ型の変数は格納しているアドレス情報を持つ変数であると述べたとおり、そのアドレス情報を他の変数に代入させる事によって、アドレスに格納していた情報を丸々書き換える事が出来る。
name := "太郎"
namePoint := &name
*namePoint = "二郎"
上記の様に定義すると、nameが格納していたアドレスをnamePointに代入し、そのアドレスに新たな変数を代入している。つまり、元々のアドレスに格納していた値を新しい値を代入する事で、もるっきり新しい値に置換している。言わば、元々家に住んでいた人を無理やり追い出し、新たな入居者に住んでもらう様なものだ。これは、「参照渡し」という。
name := "太郎"
newName := name
newName := "次郎"
では、上記の様な場合どうなるのか、
newNameには次郎が、nameには太郎が入っている。
これは、「値渡し」という物で、例えで言うと、元々あった家を元に同じ家を作って、そこに新しい入居者が住むので、元々住んでいた人は追い出されずにすむ。
表現的に値渡しの方が良い気がするが、実際はアドレスを効率的に使えるという面でも、参照渡しの方が便利である。感覚としては、エンジニアは大家さんだと認識すれば良いのかもしれ無い。
もし、より、多くのお金を払う入居者が来た場合、働かず、金を払わ無い元々に入居者のために、新しく家を作る必要があるのかという視点で、、、
1.4 ユニットテスト
話戻って、goのテストの話。
testファイルは規則に従っている。
- ファイルの末尾は_test.go。
- 関数はTestで始まる。
- *testing.T型の不奇数1つ受け取る関数が定義されている。
1.4.1.2 内部パッケージの参照の仕方
中々につまずいたポイント
何故か、内部パッケージをインポート出来無い事案
$GOPATH/src以下にプロジェクトを作成し、同階層内のパッケージを参照しようとしたのだが、なぜか上手く動作しなかった。
先輩に尋ねた所、 $HOMEPATH/src/github.com/usrname/以下にプロジェクトを作成する必要があるらしい。
試してみるとできた⭕️
また、go.modファイルをプロジェクト内の一番上の階層に1つだけ置けば、以下のプロジェクトが外部で参照できる。
2 認証機能
この項目に限らず、オライリー本に書いてあった事がとても共感できたので、ここに記しておく。
何もない状態から開発を始めようとする際は、他の開発者が同じ課題をどのように解決したかを調べる必要がある。完全に未知の課題はほとんどない。