Part 1
Go の基礎
- 分ける 関数と型
- 失敗を扱う error
- 同時に動かす goroutine
競プロで使う制御構文や型の知識はそのまま活かせます。 この Part で埋めるのは、その先です。 複数ファイルに分かれたプログラムの組み立て方、エラーの扱い方、そして Web サーバーの土台になる並行処理を学びます。 コード例の多くはページ右のエディタに読み込んで、そのまま実行・書き換えできます。
この Part の所要時間は 4〜6 時間が目安です。 終えると、Web 開発で使う Go のコードを読み、関数、構造体、エラー処理、goroutine、テストを自分で書けます。
- 競プロの Go から Web の Go へ 提出して終わりの競プロと、複数ファイルで長く育てる Web 開発とで、Go の書き方の前提がどう変わるかを整理します。
- 関数とパッケージ main に全部書かない理由から、関数分割の基準、パッケージ、命名規約、早期リターンまで、コードを分けて読みやすくする道具を学びます。
- slice の中身 slice がポインタと長さと容量の 3 つ組であることを知り、関数に渡したときに中身が共有される罠を、エディタで実際に踏んで確かめます。
- map とゼロ値 map の走査順序が保証されないことを実行して確かめ、宣言しただけの map への書き込みが panic する理由をゼロ値と nil から理解します。
- struct とメソッド 添字で対応づけていたデータに struct で名前を付け、メソッドとレシーバの使い分けを学びます。
- エラー処理 失敗が日常である本番のコードで、Go が例外ではなく値としてエラーを扱う理由と、if err != nil の慣習を学びます。
- インターフェース 「何ができるか」だけを定めるインターフェースと、io.Reader や io.Writer が Go 全体の共通言語になっている理由を学びます。
- 待ちは積み上がる 競プロにない「待ち時間」を逐次コードで体感し、Web の速さが計算ではなく待ちの重ね方で決まることを確かめます。
- goroutine と並行性 Web サーバーの土台である goroutine を動かし、共有変数が壊れる競合状態を実際に起こして sync.Mutex で直します。
- テストを書く 競プロのサンプルケース照合を自動化して恒久化したものとしてテストを捉え、go test とテーブル駆動テストを手元で書きます。