前回課題
- Read.me
- go get するように使い方をかく
- 構造体の場合は、レシーバーは基本的にポインタにするのが良い
- interface が出てきたときに当たりにくい
- 毎回コピーが
- mainパッケージ以外は外に出ないようにする
- ファイルのクローズ忘れ
- 必ずNew~関数で初期化する必要はない
- package名と関数名が被らないようにすると良い
- converter.new 関数など
- converter.newConverter はあまり良くない
講義内容・ポイント
- map
- キーを複数使いたい時は構造体とする
- ゼロ値が大事 ワードカウント
|
|
-
コンポジット型を要素とする
- struct の中に struct -> JSON化するときに良い
-
型エイリアス
- 主にリファクタリングに使う
- 呼び方を変えたい、という意味合いで使われる
- go1.9 からできた net context の話
- ビルドのときに、エイリアス
- あまり使わない。ライブラリの回収などで、古いパッケージの移行時に役立つ。
-
関数
- 型は後ろにかく。Cとは異なる
- => Goは、型はどんな時でも後ろに書く
- error を _ で省略すると、レビューでギッタギタにされる
- 戻り値にも名前をつけられる return で返される
- 値の入れ替えができる
x, y = y, x
- ポインタ型は、その実態のメソッドを使用できる
- 型は後ろにかく。Cとは異なる
-
パッケージ
-
ライブラリ
- main関数のないGoプログラム
-
パッケージ変数の使用は最低限にしておく
-
ユニバーススコープ
- main関数の main などは、ユニバーススコープである。上書き可能。
-
init関数
- 特別な場合でない限りは使用しない。
- 自動生成の時などは便利で使用されることがある。 k8sのコードなど。
-
goget が便利で、Goが流行った理由とも言える
-
C言語や以前のVerでは、Makefile を使用していた。
-
modules (vgoと開発段階では呼ばれていた。)
-
使用するべき
-
ベンダリングという物を以前を使用していた、必要なくなった
-
goinstall(後のgo get) Makefile より利便性が向上した
-
gopkg.in go get で解決できなかったバージョンの調整を正してくれる
-
ベンダリング go modulesをオンにしなければ、まだ有効
- gopath より有効
- スナップショットを保持することで、ビルドの再現性を担保できる 配布時に便利
-
glideがよく使われていた
-
depやっていき宣言
-
その半年後なぜかすぐに vgo が作られた
- moduleの概念導入
- バージョン漬けを行う単位
- go.mod を使用
- semver セマンティックバージョニング
- semverで自分のライブラリを管理しよう
- Minimal Version Selection
- moduleの概念導入
-
-
宿題
- 1. io.Readerとio.writeの重要性を調査
- 2. テストか書いてみる テストヘルパー
- インターフェース、抽象化のところを読む