Sobes.tech
Senior

Můžete uvést příklady použití WithCancel, WithTimeout a WithDeadline?

sobes.tech AI

Odpověď od AI

V balíčku context v jazyce Go jsou funkce pro vytváření kontextů s možností zrušení a omezením času:

  • WithCancel — vytváří kontext, který lze ručně zrušit voláním funkce cancel(). Používá se, když je třeba přerušit operaci na základě události.

  • WithTimeout — vytváří kontext, který se automaticky zruší po stanovené době.

  • WithDeadline — vytváří kontext, který se zruší v určitou dobu.

Příklady:

ctx, cancel := context.WithCancel(context.Background())
// Spouštíme gorutinu, která zruší kontext po 2 sekundách
//
go func() {
    time.Sleep(2 * time.Second)
    cancel()
}()

select {
case <-ctx.Done():
    fmt.Println("Operace zrušena")
}

// WithTimeout
ctxTimeout, cancelTimeout := context.WithTimeout(context.Background(), 3*time.Second)
defer cancelTimeout()
// operace, která se přeruší po 3 sekundách

// WithDeadline
deadline := time.Now().Add(5 * time.Second)
ctxDeadline, cancelDeadline := context.WithDeadline(context.Background(), deadline)
defer cancelDeadline()
// operace, která se přeruší v daný čas

Tyto mechanismy jsou užitečné pro kontrolu doby trvání požadavků, zrušení dlouhých operací a správu zdrojů.