L29 — context: cancellation, timeout, deadline, value
Ba module tương tác cho phép bạn "chạm" vào 3 cơ chế cốt lõi của package context:
cây huỷ lan từ trên xuống, timeout cascade trong HTTP request, và walk-up tìm value qua chuỗi
WithValue. Mọi minh hoạ đều standalone, mở file:// là chạy được.
1. Context tree — cancel lan từ trên xuống
Click vào một node bất kỳ để cancel nó. Mọi descendant (cháu/chắt) cũng bị cancel theo —
đây là tính chất "propagation chỉ đi xuống" của context tree. Cha và anh em không ảnh hưởng.
Mỗi node hiển thị ctx.Err() sau khi bị cancel.
cancel() trên node đó
2. HTTP request — timeout cascade
Mô phỏng request flow: client → HTTP handler → DB query → external API.
Kéo slider để thay đổi handler timeout và DB latency. Nếu DB chậm hơn timeout,
ctx.Done() fire, DB bị cancel (thanh đỏ), handler trả 504 Gateway Timeout.
Đường kẻ đỏ đứt nét chính là deadline của context.
3. ctx.Value(key) — walk up chain
Khi gọi ctx.Value(key), runtime đi từ ctx hiện tại lên cha,
kiểm tra từng node, gặp node nào có key trùng thì trả luôn value. Nếu đi tới
Background mà vẫn không thấy → trả nil.
Chọn key từ dropdown để xem traversal animate qua chuỗi.