Slide 15
Slide 15 text
変化② キャンセルの伝搬
context で下流まで伝わ キャンセル
const queryTimeout = 10 * time.Second
func (h *Handler) Get(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
// 上流が切れれば ctx も終了する
ctx, cancel := context.WithTimeout(ctx, queryTimeout)
defer cancel()
rows, err := h.db.QueryContext(ctx, query)
// DB クエリも止まる
resp, err := h.client.Do(req.WithContext(ctx))
// 呼び出し先も止まる
}
●
受け取った ctx を渡していくだけで、DB クエリも、別の API の呼び出しも一緒に止ま
●
渡すのが習慣になってい ため、多くのライブラリで自然に実装でき
© M3, Inc. 2025
15