Go 1日1問 学習記録
Phase 3 — 上級者 | 並行処理パターン・pprofプロファイリング・GC/メモリモデル理解・本番品質API設計(Day 101-180)
76
累計日数
3
Phase
15 / 20
Ph3テーマ進捗
上級者
現在のランク
🟡 Phase 3 — 並行処理パターン・pprofプロファイリング・GC/メモリモデル理解
Day 029 –
2026-10-16
Day 076 — ミドルウェア設計パターン: 止め方のバグ 5 つ——SIGTERM を取りこぼす・os.Exit で控えが消える・BaseContext で処理中が全滅・readiness を落とさず閉じる・長い接続が猶予を食う(1 つ直すと隠れていた 1 つが出る)
デバッグ・コードレビュー
2026-10-15
Day 075 — ミドルウェア設計パターン: 応答後の仕事を「止めずに止める」——Detach を (*Edge).Go に育て、srv.Shutdown → 仕事の待ち → 期限で切る、の順を Serve の中に固定する(逆順・RegisterOnShutdown・ErrServerClosed で抜ける、の 3 通りは 50 件の監査を 1 件も残さなかった)
実装
2026-10-14
Day 074 — ミドルウェア設計パターン: Edge を別サービスでも使える部品として切り出す API を決める——何を引数にし、何を既定にし、何を利用者に選ばせないか(積む順 24 通り中 2 通りしか正しくない部品箱をやめ、Config 1 つと起動時の検査にする)
設計・アーキテクチャ
2026-10-13
Day 073 — ミドルウェア設計パターン: OTel につないだ Edge を本番に寄せたら壊れた——上流のトレースが途切れる・比率サンプリングが上流の判断を無視する・WithGroup で trace_id がグループに潜る・応答後の監査が cancel で落ちる・探針が SLI を動かす、の 5 バグ
デバッグ・コードレビュー
2026-10-12
Day 072 — ミドルウェア設計パターン: Edge を本物の OpenTelemetry につなぐ——otelhttp はトレースだけにし、メトリクスは Edge が semconv どおり 1 点だけ書き、ログの 1 行に trace_id・request_id を自動で載せる
実装
2026-10-11
Day 071 — ミドルウェア設計パターン: error・panic・集計を「誰が 1 回だけ書くか」を決める——8 つの場面 × ログ/メトリクス/トレースの表を作り、otelhttp v0.70.0 が送信後の切断をメトリクスから落とすことを実物で確かめる
設計・アーキテクチャ
2026-10-10
Day 070 — ミドルウェア設計パターン: Day 069 の Adapt を Recover・Observe と積んだら壊れた——途中で切れた CSV が完全な 200 で届く・相手が切った要求が成功に数えられる・エラーログが 2 倍、の 5 バグを 8 本のテストで捕まえる
デバッグ・コードレビュー
2026-10-09
Day 069 — ミドルウェア設計パターン: error を返すハンドラ(Echo・Caddy 型)を net/http に橋渡しする Adapt——error→ステータスの表、送信後の error、外側の中間件との順序を 13 本のテストと 14 通りの変異で決める
実装
2026-10-08
Day 068 — ミドルウェア設計パターン: 「next」とは何か——net/http のデコレータ・Gin/Express 型の添字・Koa 型の (ctx, next) を、同じ 6 つの問いで予想してから実物と Go で測る
概念理解
2026-10-07
Day 067 — ミドルウェア設計パターン: ルートごとのポリシーに入り込んだ 5 つのバグ——グループの継承・共有ポインタ・「-1=上限なし」・二重の数え・鍵の食い違いを、9 本のテストと 11 通りの変異で直す
デバッグ・コードレビュー
2026-10-06
Day 066 — ミドルウェア設計パターン: ルートごとに守りを外す・足す——積む順は 1 本のまま「ポリシー」を ctx に置いて守りに読ませ、書き忘れが「開く」側に倒れないことを 10 通りの変異と 5,040 通りの並びで確かめる
実装
2026-10-05
Day 065 — ミドルウェア設計パターン: 守り 6 つの積む順を 1 本に決める——7 つの要件を「A は B より外」の対に直し、720 通りを全部流して通る順序が 2 通りしかないことを確かめる
設計・アーキテクチャ
2026-10-04
Day 064 — ミドルウェア設計パターン: 「panic を拾う」はずの Recover が拾えていない——補助関数の recover・送信後の 500・goroutine の panic・数えられない切断の 5 つのバグを 7 本のテストで直す
デバッグ・コードレビュー
2026-10-03
Day 063 — ミドルウェア設計パターン: ServeMux の「外」に置くか「内」に置くか——r.Pattern・404・405・307 の見え方を予想してから 9 本のテストで確かめる
概念理解
2026-10-01
Day 062 — ミドルウェア設計パターン: リクエスト本文の上限をどこで・何バイトで切るか——Content-Length の先読み・MaxBytesReader・gzip 展開後の 3 点を 11 本のテストで固める
実装
2026-09-30
Day 061 — ミドルウェア設計パターン: タイムアウトをどの層に置くか——TimeoutHandler・ctx の期限・Server.WriteTimeout が「何を止め、何を止めないか」を8つの実験で測り、ルートごとに仕分ける
設計・アーキテクチャ
2026-09-29
Day 060 — ミドルウェア設計パターン: 4 本のミドルウェアが「単体では正しい」のに、積むと壊れる——gzip の defer が panic を 200 にし、Flush が溜めに止まる 6 つのバグをテストで直す
デバッグ・コードレビュー
2026-10-02
Day 059 — ミドルウェア設計パターン: ルートごとに上限が違うレート制限——トークンバケットを60行で書き、守りの「どこ」に置くかを10個のテストで固める
実装
2026-09-28
Day 058 — ミドルウェア設計パターン: context.WithValue に何を入れてよいか——キーの同一性・上向きの袋・後で走る goroutine を7つの実験で確かめ、8つの候補を仕分ける
概念理解
2026-09-27
Day 057 — ミドルウェア設計パターン: ルートごとに違うミドルウェアをどう組むか——ServeMux だけの3案と chi を、同じ要件表10行で測って選ぶ
設計・アーキテクチャ
2026-09-26
Day 056 — ミドルウェア設計パターン: レビュー依頼の4本のミドルウェアと Chain に潜む5つのバグ——順序・return 抜け・ResponseWriter のラップ・本文の消費をテストで炙り出す
デバッグ・コードレビュー
2026-09-25
Day 055 — gRPC/Protocol Buffers実装(続き): 標準ライブラリだけで grpc.health.v1 を話す——5バイトの枠と trailer を実装し、本物の grpc-go クライアントで確かめる
実装
2026-09-24
Day 054 — gRPC/Protocol Buffers実装(続き): エラーモデル設計——ドメインエラーをステータスコードへ写像し、リトライの範囲を決める
設計・アーキテクチャ
2026-09-23
Day 053 — gRPC/Protocol Buffers実装(続き): 未知フィールドの読み飛ばし——I32/I64(固定長)と前方互換を壊す4つのバグ
デバッグ・コードレビュー
2026-09-18
Day 052 — gRPC/Protocol Buffers実装(続き): Length-delimited(Wire Type 2)で見る string・埋め込みメッセージの共通構造
実装
2026-09-17
Day 051 — gRPC/Protocol Buffers実装(続き): Wire Format理解——varint符号化とタグ構造から見る「なぜPBは速いのか」
概念理解
2026-09-16
Day 050 — gRPC/Protocol Buffers実装(続き): Server streaming疑似実装とgoroutineリークのデバッグ
デバッグ・コードレビュー
2026-09-15
Day 049 — gRPC/Protocol Buffers実装(続き): デッドライン伝播とストリーミングRPCの設計判断
設計・アーキテクチャ
2026-09-14
Day 048 — gRPC/Protocol Buffers実装: サービス定義からのコード生成の仕組みと標準ライブラリnet/rpcによる疑似体験
実装
2026-09-13
Day 047 — ジェネリクス応用(制約・型セット): 型要素とメソッド要素を組み合わせた複合制約の落とし穴
デバッグ・コードレビュー
2026-09-12
Day 046 — ジェネリクス応用(制約・型セット): 独自の型制約インターフェースの設計
実装
2026-09-11
Day 045 — unsafeパッケージの基礎(概念編: 安全性を捨てる4つの場面と代償)
概念理解
2026-09-10
Day 044 — reflectパッケージ(コードレビュー: 書き込み系reflectの3つのバグ)
デバッグ・コードレビュー
2026-09-09
Day 043 — reflectパッケージ(実装: 汎用バリデータ関数と代償の実測)
実装
2026-09-08
Day 042 — ベンチマーク駆動最適化(コードレビュー: ループ内での正規表現再コンパイル)
デバッグ・コードレビュー
2026-09-07
Day 041 — pprofによるプロファイリング②(メモリ)(概念編: サンプリングと4つの計測軸)
概念理解
2026-09-06
Day 040 — pprofによるプロファイリング②(メモリ)(実践: スライス共有によるメモリリークのコードレビュー)
デバッグ・コードレビュー
2026-09-05
Day 039 — pprofによるプロファイリング②(メモリ)(実践: 文字列連結によるアロケーション過多の特定)
実装
2026-09-04
Day 038 — pprofによるプロファイリング①(CPU)(実践: 非効率アルゴリズムのCPUプロファイル取得と特定)
実装
2026-09-03
Day 037 — GC・エスケープ解析の理解(実践: 隠れたヒープ割当のコードレビュー)
デバッグ・コードレビュー
2026-09-02
Day 036 — GC・エスケープ解析の理解
概念理解
2026-09-01
Day 035 — メモリモデルとhappens-before関係
概念理解
2026-08-31
Day 034 — race condition検出(go test -race)
デバッグ・コードレビュー
2026-08-30
Day 033 — errgroup パッケージ(SetLimitによる同時実行数制御)
実装
2026-08-29
Day 032 — errgroup パッケージ
デバッグ・コードレビュー
2026-08-28
Day 031 — 並行処理パターン③(Pipeline)
実装
2026-08-27
Day 030 — 並行処理パターン②(Fan-in/Fan-out)
実装
2026-08-26
Day 029 — 並行処理パターン①(Worker Pool)
デバッグ・コードレビュー
🔵 Phase 2 — goroutine/channel基礎・エラーハンドリング・ジェネリクス・テスト
Day 009 –
2026-08-25
Day 028 — HTTPクライアント実装
実装
2026-08-24
Day 027 — HTTPサーバー実装(net/http)
実装
2026-08-23
Day 026 — モック・DI設計(インターフェース経由の依存注入)
設計・アーキテクチャ
2026-08-22
Day 025 — ベンチマークテスト(testing.B・b.N・アロケーション計測)
実装
2026-08-21
Day 024 — testing パッケージ②(サブテスト・testify)
実装
2026-08-20
Day 023 — testing パッケージ①(テーブル駆動テスト)
概念理解→実装
2026-08-19
Day 022 — ジェネリクス基礎(型パラメータ)
実装
2026-08-18
Day 021 — embedding(構造体・インターフェースの埋め込み)
実装
2026-08-17
Day 020 — インターフェース設計の原則(小さいインターフェース)
概念理解→設計
2026-08-16
Day 019 — カスタムエラー型設計(センチネル vs カスタム型の使い分け)
設計・アーキテクチャ
2026-08-15
Day 018 — エラーラッピング(errors.Is/As/Unwrap)
実装
2026-08-14
Day 017 — context パッケージ②(タイムアウト・値の伝播)
実装
2026-08-13
Day 016 — context パッケージ①(キャンセル伝播)
概念理解→実装
2026-08-12
Day 015 — sync.Once, sync.Pool
実装
2026-08-11
Day 014 — sync.Mutex / RWMutex(コードレビュー編)
デバッグ・コードレビュー
2026-08-10
Day 013 — sync.Mutex / RWMutex
実装
2026-08-09
Day 012 — sync.WaitGroup
実装
2026-08-08
Day 011 — select文
実装
2026-08-07
Day 010 — channelの基礎(バッファなし/バッファあり)
実装
2026-08-06
Day 009 — goroutineの基礎(軽量スレッドとしてのgoroutine)
概念理解→実装
🟢 Phase 1 — 基礎文法・スライス/マップ・構造体・インターフェース基礎
Day 001 –
2026-08-05
Day 008 — 構造体の基礎(struct定義・フィールドタグ)
デバッグ・コードレビュー
2026-08-04
Day 007 — 関数の基礎(複数戻り値・可変長引数)
実装
2026-08-03
Day 006 — マップ(作成・操作・存在確認)
実装
2026-08-02
Day 005 — スライス②(内部構造・容量・共有スライスの罠)
デバッグ・コードレビュー
2026-08-01
Day 004 — 配列とスライス①(作成・アクセス・append)
概念理解→実装
2026-07-31
Day 003 — 制御構文(if/for/switch)
実装
2026-07-30
Day 002 — 定数とiota
実装
2026-07-29
Day 001 — 変数宣言・型推論・基本型(int, float64, string, bool)
概念理解→実装