Sobes.tech
Senior

Puteți oferi exemple de utilizare a WithCancel, WithTimeout și WithDeadline?

sobes.tech AI

Răspuns de la AI

În pachetul context din Go, există funcții pentru crearea de contexte cu posibilitatea de anulare și limitare a timpului de execuție:

  • WithCancel — creează un context care poate fi anulat manual apelând funcția cancel(). Este utilizat atunci când trebuie să întrerupeți o operație la un eveniment.

  • WithTimeout — creează un context care se anulează automat după un interval de timp specificat.

  • WithDeadline — creează un context care se anulează la un moment specific.

Exemple:

ctx, cancel := context.WithCancel(context.Background())
// Începem o gorutină care va anula contextul după 2 secunde
go func() {
    time.Sleep(2 * time.Second)
    cancel()
}()

select {
case <-ctx.Done():
    fmt.Println("Operație anulată")
}

// WithTimeout
ctxTimeout, cancelTimeout := context.WithTimeout(context.Background(), 3*time.Second)
defer cancelTimeout()
// operație care se va întrerupe după 3 secunde

// WithDeadline
deadline := time.Now().Add(5 * time.Second)
ctxDeadline, cancelDeadline := context.WithDeadline(context.Background(), deadline)
defer cancelDeadline()
// operație care se va întrerupe la timpul stabilit

Aceste mecanisme sunt utile pentru controlul timpului de execuție al solicitărilor, anularea operațiilor lungi și gestionarea resurselor.