Goでプログラミングを始める
初心者向けの実践的なゴー言語入門です。小さな、扱いやすいレッスンに分けられた構成で、宇宙探査をテーマに、命令型プログラミング、型、関数、メソッド、コレクション、状態、並行処理をカバーしています。
コース概要
📚 コンテンツ概要
初心者向け、実践的なゴー(Go)プログラミング言語の入門。本コースは、宇宙探査をテーマにした小さな学習モジュールに分けられ、命令型プログラミング、型、関数、メソッド、コレクション、状態、並行処理について学びます。
小規模なレッスンと7つの宇宙探査プロジェクトを通じて、ゴーでコーディングする楽しさを発見しましょう。
著者: ナサン・ヤングマン、ロジャー・ペッペ
謝辞: ジェニファー・ストゥート、マリナ・マイケルズ、マシュー・メルケス、ジョエル・コタルスキ、アレクサンドル・ドラゴサヴリエヴィッチ、リニー・フランス、オルガ・シャラキナ、エリック・ゼレイア、エイプリル・ミルン、モニカ・カムスヴァーグ。
🎯 学習目標
- ゴー言語の定義と主な用途を説明できる。
- ゴー コンパイラの役割とインタプリタとの利点を説明できる。
- ゴー プレイグラウンドを使ってコードを記述・コンパイル・実行できる。
- 必須の「ワン・トゥルーブレイススタイル」を正しく使用し、構文エラーを回避できる。
- 多様な変数宣言手法と算術代入演算子を使ってデータを管理できる。
- 乱数を生成し、分岐や論理演算子を使って条件付きロジックを実装できる。
float32およびfloat64を使って浮動小数点変数を宣言・フォーマットし、特定の幅と精度を指定できる。- 浮動小数点の不正確さや整数のオーバーフローによるエラーを識別・緩和できる。
bigパッケージと無型定数を使用して、標準ビットサイズを超える数値を扱える。- パラメータ、引数、可変長引数構文を使って関数を定義・呼び出せる。
🔹 レッスン1:軌道への離陸
概要: このレッスンでは、クラウドコンピューティングの現代的プログラミング言語であるゴーについて紹介します。学生はゴーがコンパイル型であるという点とインタープリタ型言語との根本的な違いを学び、すぐに試せるゴー プレイグラウンドの使い方、パッケージと main 関数を含むゴープログラムの基本構造について理解します。
学習成果:
- ゴー言語の定義と主な用途を説明できる。
- ゴー コンパイラの役割とインタプリタとの利点を説明できる。
- ゴー プレイグラウンドを使ってコードを記述・コンパイル・実行できる。
🔹 レッスン2:ミッションコントロールのロジック
概要: このレッスンでは、ゴープログラミングの基本構成要素を紹介し、コードの構造化と実行制御について学びます。学生は「ワン・トゥルーブレイススタイル」やプログラムのエントリポイントについて学び、変数宣言のショートカットや数学演算子の進展を経て、ブール値、比較演算、分岐を使って意思決定を行うロジックを習得します。
学習成果:
- 必須の「ワン・トゥルーブレイススタイル」を正しく使用し、構文エラーを回避できる。
- 多様な変数宣言手法と算術代入演算子を使ってデータを管理できる。
- 乱数を生成し、分岐と論理演算子を使って条件付きロジックを実装できる。
🔹 レッスン3:宇宙データの物理法則
概要: このレッスンでは、ゴーが数値データをどのように扱うかを探ります。浮動小数点数の分数精度から、天文学的な距離に必要な巨大なスケールまでカバーします。学生はコンピュータメモリの限界、特に浮動小数点の不正確さや整数のオーバーフローといった問題を理解しながら、明示的な型変換と、big パッケージを使った「特殊な」数値サイズの扱いをマスターします。
学習成果:
float32およびfloat64を使って、幅と精度を指定した浮動小数点変数を宣言・フォーマットできる。- 浮動小数点の不正確さや整数のオーバーフローによるエラーを識別・緩和できる。
bigパッケージと無型定数を使って、標準ビットサイズを超える数値を扱える。
🔹 レッスン4:モジュールの構築
概要: このレッスンでは、ゴープログラムの基本的な構成要素である関数、カスタム型、メソッドについて学びます。学生は再利用可能なロジックをカプセル化する方法、特定の振る舞いを持つ新しい型を定義する方法、そしてクロージャや無名関数を含む第一級関数を利用して柔軟でモジュール性の高いコードを構築する方法を学びます。最終的に、温度変換表を作成する実践的なキャプストーンプロジェクトで締めくくります。
学習成果:
- パラメータ、引数、可変長引数構文を使って関数を定義・呼び出せる。
- ゴーの命名規則を使って、エクスポート済みと非エクスポート済み識別子を区別できる。
- カスタム型を定義し、メソッドとレシーバを使って振る舞いを付与できる。
🔹 レッスン5:貨物室の補充
概要: このレッスンでは、情報を集約的に管理するためのゴーの主要なデータ構造について学びます。固定長配列とそのメモリコピーの挙動から始まり、データに対する柔軟なウィンドウとして機能する動的スライスへと移行し、効率的なキー値検索のためにマップを学びます。この単元の最終課題は、「ライフゲーム」のキャプストーンで、多次元スライスを使って複雑なシステムをシミュレーションする方法を示します。
学習成果:
- 固定長配列と多次元グリッドを宣言・初期化・反復処理できる。
- インデックス範囲の操作と
append関数による動的な成長を使ってスライスを操作できる。 - 長さと容量の違いを認識し、
makeを使って事前確保することでメモリ効率を向上させられる。
🔹 レッスン6:火星の居住施設の設計
概要: このレッスンでは、ゴーが複雑なデータと振る舞いをどのように整理するかを紹介します。学生は異なるデータ型をグループ化する構造体(struct)、組み込みリテラルを使った初期化、メソッドとコンストラクタ関数による振る舞い管理について学びます。また、ゴー独自の設計哲学である「継承より組み合わせを優先し、暗黙的なインターフェースを使ってポリモーフィズムを達成する」という考え方も探ります。
学習成果:
- 構造体を定義・初期化・コピーし、火星座標やローバーのデータを管理できる。
- 構造体タグを使ってゴー構造体をJSON形式にエンコードし、カスタマイズされたデータ交換を可能にする。
- メソッド、コンストラクタ関数、構造体の埋め込みを使って、再利用可能で組織的なコードを構築できる。
🔹 レッスン7:ゴーファー・ホールのナビゲーション
概要: このレッスンでは、ゴーにおける間接参照の強力さと安全性について探ります。ポインタがデータの効率的な変更とメモリ管理を可能にする仕組みを学び、nil 値の扱い、defer によるリソース管理、そして慣用的なエラー処理パターンを身につけることで、防御的なプログラミングのフレームワークを獲得します。最終的には、これらのルールを活用してスキューダの検証エンジンを実装します。
学習成果:
- アンパサンド(
&)とアスタリスク(*)を使ってメモリアドレスを管理し、値のデリファレンスができる。 - ポインター引数やレシーバを使って、関数やメソッド内でデータを変更できる。
- スライス、マップ、インターフェースにおいて
nil値を安全に扱い、ランタイムパンクを引き起こさない。
🔹 レッスン8:マルチローバー通信
概要: このレッスンでは、ゴーのコア並行処理機構であるゴルーチンとチャネルについて紹介します。独立したタスクを実行し、それらの間で安全に通信し、ミューテックスを使って共有状態を管理することで、競合状態を回避する方法を学びます。最終的に、火星ローバーがグリッドを探索し、発見を報告するシミュレーションプロジェクトで締めくくります。
学習成果:
goキーワードを使って並行タスクを起動・管理できる。- チャネルと
select文を使ってゴルーチン間で安全に通信できる。 - チャネルを閉じることでデータパイプラインを構築し、ゴルーチンのライフサイクルを管理できる。