インタラクティブコース
囲碁コース
Go を英語でゼロから学びましょう。実際のコンパイラでコードを実行するための静的検証と公式 Go プレイグラウンドへの直接リンクを使用した演習。
キーワードによる静的検証 + 公式での実行Go Playground(ワンクリックでコードをコピーして開きます)。
01 · モジュール 1 — 言語の基礎
5 レッスン
基礎: fmt パッケージを使用したパッケージ、変数、型、定数、演算子、入出力。
- 1.1変数と型var、短い宣言 `:=`、基本型 (int、float64、string、bool)、および静的型付けの概念。~10 min
- 1.2ゼロ値と型の変換すべての変数にはデフォルト値があります。変換は明示的です (`int(x)`、`string(b)`)。~10 min
- 1.3定数とイオタ`const`、型なし定数、および読み取り可能な列挙を生成するための `iota` パターン。~10 min
- 1.4オペレーター算術、比較、論理、ビット単位。他の言語との優先順位と違い。~8 min
- 1.5fmtによる入出力`fmt.Println`、`fmt.Printf`、フォーマット動詞 (`%d`、`%s`、`%v`、`%T`)、およびどちらかを優先する場合。~10 min
02 · モジュール 2 — 制御フロー
5 レッスン
決定と繰り返し: init ステートメント、単一の「for」、慣用的なスイッチ、および明示的なエラー処理を使用する場合。
- 2.1if、else、および init ステートメント`if v := f(); v > 0 { ... }` 形式と、Go に三項演算子がない理由。~10 min
- 2.2for: 唯一のループ「for」の 3 つの形式: 3 つの句、単一条件 (= while)、および無限。 「break」と「Continue」を使用します。~10 min
- 2.3...範囲用スライス、マップ、文字列を反復処理します。戻り値はコピーです。インデックスまたは値を `_` で無視する場合。~10 min
- 2.4慣用的なスイッチ暗黙的なフォールスルーはなく、case 内の複雑な式は、if のチェーンとして条件なしで切り替わります。~10 min
- 2.5エラー: `if err != nil` パターンエラーは値です。基本的なパターン「if err != nil { return err }」と、Go に例外がない理由。~12 min
03 · モジュール 3 — 関数
5 レッスン
第一級市民としての機能: シグニチャー、複数の戻り値、可変個引数パラメーター、クロージャー、および `defer`。
- 3.1署名とパラメータ`func name(p type) type` 構文、デフォルトでは値渡し、同じ型のパラメータはグループ化されます。~10 min
- 3.2複数の戻り値と名前付き戻り値複数の値 (`value, err`) を返す場合、名前付きの戻りパターン、およびそれを使用しない場合。~12 min
- 3.3可変個引数関数`func sum(nums ...int) int`、`slice...` でスライスを展開、stdlib の例。~10 min
- 3.4値としてのクロージャと関数周囲のコンテキストから変数を取得する匿名関数。アダプターとファクトリーパターン。~12 min
- 3.5`defer`: 確実なクリーンアップ戻るまで実行を延期します。 `defer f.Close()` パターン、LIFO 順序、ループ内の注意事項。~12 min
04 · モジュール 4 — コレクション
5 レッスン
配列、スライス (最も重要な構造)、マップ、文字列内のルーン、および並べ替え。
- 4.1固定長配列`[N]T` 構文、Go で実数配列がほとんど使用されない理由、配列からスライスへの変換。~8 min
- 4.2スライス: 慣用的な構造`make`、`append`、len/cap、`s[a:b]` のスライス、基になる配列の共有、いつコピーするか。~15 min
- 4.3マップ: キーと値宣言、カンマ OK アクセス (`v, ok := m[k]`)、`delete`、非決定的反復。~12 min
- 4.4文字列、バイト、ルーン文字列は UTF-8 バイトです。 「range」はルーンを生成します。 `len()` は文字ではなくバイトをカウントします。~12 min
- 4.5ソートパッケージを使用したソート`sort.Ints`、`sort.Strings`、`sort.Slice`、比較関数付き、安定性。~10 min
05 · モジュール 5 — 構造体とメソッド
5 レッスン
複合データ型: 構造体、値またはポインター レシーバーのメソッド、合成 (継承なし)、およびタグ。
- 5.1構造体の定義と使用`type Person struct { 名前文字列; Age int }`、位置初期化と名前付き初期化、匿名構造体。~12 min
- 5.2メソッド: 値とポインター レシーバー`func (p person) Hello()` と `func (p *person) Rename(n string)` の比較;どちらかをいつ使用するか。~14 min
- 5.3合成(埋め込み)Go には継承がありません。ある型を別の型の中に埋め込むことで作成します。メソッドのプロモーション。~12 min
- 5.4フィールドタグとJSON`json:"name,omitempty"`、`encoding/json` によるマーシャリング/アンマーシャリング、よくある間違い。~12 min
- 5.5`New...` コンストラクター パターンGo にはコンストラクターがありません。規則は、検証してエラーを返す `NewT(...) *T` 関数です。~10 min
06 · モジュール 6 — インターフェース
5 レッスン
構造インターフェイス (明示的な実装なし)、アサーション、型スイッチ、および標準の `Stringer` および `error` インターフェイス。
- 6.1インターフェイス: 動作の定義インターフェイスはメソッドのセットです。それらを実装する人は誰でも、自動的にそれを満たします (静的ダックタイピング)。~12 min
- 6.2型アサーション`v, ok := i.(*MyT)` は、型切り替えよりもアサーションを優先する場合のパニックを避けるためのカンマ OK 形式です。~10 min
- 6.3タイプスイッチ`switch v := x.(type) { case int: ... }` を使用して、ランタイム型でディスパッチします。~10 min
- 6.4ストリンガーインターフェイス`String() string` を実装すると、`fmt.Println` が型を表す方法が変わります。~10 min
- 6.5エラーインターフェイス`error` は単なる `Error() string` です。カスタム エラー、`errors.Is`、`errors.As`、`fmt.Errorf("%w", err)` を作成します。~14 min
07 · モジュール 7 — 同時実行性
5 レッスン
Go の同時実行モデル: 軽量のゴルーチン、通信用のチャネル、「選択」、同期、およびコンテキスト。
- 7.1ゴルーチン: 軽量の並列処理`go f()`、ゴルーチンのコスト、main が待機せずに終了する理由、および同期方法。~12 min
- 7.2チャネル: 型付きコミュニケーション`ch := make(chan int)`、`ch <- v`、`v := <-ch`、バッファ付きチャネルとバッファなしチャネル、クローズ。~15 min
- 7.3`select`: チャネルを多重化する最初の準備ができたチャネルを待ちます。ブロックを避けるための `default` の場合、`time.After` によるタイムアウト パターンです。~12 min
- 7.4`sync.Mutex` と `sync.WaitGroup`チャネルが十分でない場合: Mutex で共有状態を保護し、WaitGroup で N 個のゴルーチンを待ちます。~14 min
- 7.5`context.Context`: キャンセルと期限ゴルーチン、`context.WithTimeout`、`ctx.Done()`、最初のパラメータのパターン全体にキャンセルを伝播します。~14 min
08 · モジュール 8 — 必須の標準ライブラリ
5 レッスン
毎日使用するパッケージ: fmt、strings、strconv、io、os、time、encoding/json。
- 8.1高度な「fmt」`Sprintf`、`Fprintf`、動詞 `%+v` および `%#v`、幅と精度の書式設定、`-` および `0` フラグ。~10 min
- 8.2`strings` と `strconv``strings.Contains/Split/Join/TrimSpace`、`strconv.Itoa/Atoi/ParseInt/FormatFloat`。~12 min
- 8.3`io` と `os`: ファイルとストリーム`os.Open/Create/ReadFile/WriteFile`、`io.Reader/Writer` インターフェイス、`defer f.Close()` パターン。~14 min
- 8.4`time` パッケージ`time.Now()`、継続時間、参照レイアウト `2006-01-02 15:04:05` による解析、タイマーおよびティッカー。~12 min
- 8.5`エンコーディング/json``json.Marshal/Unmarshal`、構造体タグ、ストリームの `json.Decoder/Encoder`、解析エラー。~14 min
09 · モジュール 9 — テスト、モジュール、ツール
5 レッスン
「go test」ツール、テーブル駆動テスト、ベンチマーク、「go mod」による依存関係管理、およびビルドタグ。
- 9.1「テスト」パッケージ`*_test.go` ファイル、`TestXxx(t *testing.T)` 関数、`t.Error` と `t.Fatal`、`go test ./...`。~12 min
- 9.2テーブル駆動テスト慣用的なパターン: 入力と予期される出力を含む匿名構造体のスライス、サブテスト用の `t.Run(name, ...)`。~14 min
- 9.3ベンチマークとプロファイル`BenchmarkXxx(b *testing.B)` 関数、`for i := 0; i < b.N; i++` ループ、`go test -bench=.`。~12 min
- 9.4Goモジュール`go mod init`、`go get`、セマンティックインポートバージョニング、`go.sum` ロックファイル、`go mod tiny`。~12 min
- 9.5制約とタグを構築するクロスプラットフォーム ビルド用の `//go:build ...` ディレクティブ、テスト/統合コード、実際の例を分離します。~10 min
10 · モジュール 10 — 慣用的な練習
5 レッスン
ネーミング、高度なエラー処理、ジェネリックス (Go 1.18 以降)、および 2 つのミニプロジェクト (CLI と HTTP サーバー)。
- 10.1命名規則とスタイルエクスポートには PascalCase、ローカルには CamelCase、短いスコープの短い名前、`gofmt` は交渉の余地がありません。~10 min
- 10.2慣用的なエラー処理センチネル エラー (`io.EOF`)、`Unwrap` によるカスタム エラー、`%w` によるラップ、`panic` を使用するタイミング。~14 min
- 10.3ジェネリック (Go 1.18+)型パラメータ `func Map[T, U any](s []T, f func(T) U) []U`、制約 (`comparable`、カスタム)、トレードオフ。~15 min
- 10.4ミニプロジェクト: フラグ付きの CLI`flag` パッケージ、コマンドとサブコマンド、終了コード、出力用の `log` と `fmt` 。~18 min
- 10.5ミニプロジェクト: HTTP サーバー「net/http」、最小限のハンドラーとルーター、デコレーターとしてのミドルウェア、コンテキストに応じた正常なシャットダウン。~18 min