🔩 ねじき教室 Go と Web の教室

Part 1

Go の基礎

30秒でつかむ 小さく分けて、失敗と同時実行を扱う
小さく分けて、失敗と同時実行を扱う競プロで使ったGoから出発し、コードの分割、データの扱い、エラー、並行処理へ進みます。1分ける関数と型2失敗を扱うerror3同時に動かすgoroutine
  1. 分ける 関数と型
  2. 失敗を扱う error
  3. 同時に動かす goroutine

競プロで使う制御構文や型の知識はそのまま活かせます。 この Part で埋めるのは、その先です。 複数ファイルに分かれたプログラムの組み立て方、エラーの扱い方、そして Web サーバーの土台になる並行処理を学びます。 コード例の多くはページ右のエディタに読み込んで、そのまま実行・書き換えできます。

この Part の所要時間は 4〜6 時間が目安です。 終えると、Web 開発で使う Go のコードを読み、関数、構造体、エラー処理、goroutine、テストを自分で書けます。

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