parent.Done() if done == closedchan || done == nil { return nil, false } p, ok := parent.Value(&cancelCtxKey).(*cancelCtx) if !ok { return nil, false } p.mu.Lock() ok = p.done == done p.mu.Unlock() if !ok { return nil, false } return p, true } • 新しくContextのValue()を用いるよ うになっています。後述しますが、これ でカスタムコンテキストの場合でもキャ ンセル可能なコンテキスト(cancelCtx)を 探索できるようになります。 • Done()メソッドをカスタム実装してい る場合はゴルーチンを生成しない対象 外(チャネル値は同じmakeの呼び出しで生成された場 合 or nil の場合のみ一致) ✓ CLではparentCancelCtx関数が全体的に書き換わっています。