このプロジェクトについて

7days-golangはgeektutuが管理する「7日間でGoをゼロから実装する」シリーズの教育用リポジトリで、MITライセンスで提供されている。このリポジトリは、7日間で一般的なGoの基本コンポーネントを段階的に実装することで、読者がこれらのツールの内部原理を理解できるように設計されており、各サブプロジェクトは日ごとにディレクトリが分割され、作者のウェブサイト上のシリーズ解説記事が付属している。 主に4つのサブプロジェクトが含まれている: 1. Gee Webフレームワーク(gee-web):ginを模倣したWebフレームワークで、7日間の内容は順に、http.Handlerインターフェースの基礎、Contextコンテキストの設計、Trie木ベースのルーティング、ルーティンググループ(Group)制御、ミドルウェア機構、HTMLテンプレートの埋め込み、そしてPanicリカバリと堅牢性処理である。 2. GeeCache分散キャッシュ(gee-cache):groupcacheを模倣した分散キャッシュシステムで、内容はLRUキャッシュ追い出し戦略、シングルマシン同時キャッシュ、HTTPサーバー、一貫性ハッシュ、分散ノード間通信、キャッシュ破綻を防ぐsingleflightの実装、およびデータ交換形式としてのProtobufの使用をカバーしている。 3. GeeORMフレームワーク(gee-orm):xormとgormを参考に設計されたORMフレームワーク。作者は、gorm v2がまだ開発中であり、xormの設計の方が理解しやすいため、インターフェース設計は主にxormを参考にし、一部の詳細実装はgormを参考にしていると説明している。7日間の内容は、database/sqlの基礎、オブジェクトとテーブル構造のマッピング、レコードの追加とクエリ、チェーン操作と更新削除、フック(Hooks)、トランザクションサポート、およびデータベースマイグレーション(Migrate)を含む。 4. GeeRPCフレームワーク(gee-rpc):Go標準ライブラリnet/rpcをベースに実装されたRPCフレームワークで、コードは約1k行。その上に、プロトコル交換、サービス登録と発見、負荷分散、タイムアウト処理、HTTPプロトコルデバッグサポートなどの機能を追加している。日ごとに、サーバー側とメッセージエンコーディング、並行処理と非同期をサポートするクライアント、サービス登録、タイムアウト処理、HTTPプロトコルサポート、負荷分散、およびサービス発見とレジストリセンターについて解説している。 さらに、リポジトリには4つのGo WebAssemblyサンプル(demo-wasm)が付属しており、Hello World、関数の登録、DOM操作、コールバック関数の書き方をデモンストレーションし、関連記事として「Go WebAssembly 簡明教程」が用意されている。 作者はまた、補助的な読み物として「Go言語簡明教程」「Go言語筆記試験面接問題」「Go言語高性能プログラミング」を推奨しており、読者はまずGoの基本文法、並行プログラミング、依存関係管理を理解してから実践に取り組むことを提案している。このリポジトリ全体は、Webフレームワーク、分散キャッシュ、ORM、RPCの内部メカニズムを深く理解したいGo学習者に適している。