Sobes.tech
Junior — Middle

Mi a különbség a WithTimeout és a WithDeadline funkciók használata között az időtartam ellenőrzésének kontextusában?

sobes.tech MI

Válasz az MI-től

A WithTimeout és WithDeadline funkciók Go-ban időkorlátos kontextus létrehozására szolgálnak, de különböznek abban, hogy hogyan állítják be ezt a korlátot:

  • WithTimeout(parent, timeout) egy olyan kontextust hoz létre, amely automatikusan megszűnik a timeout idő elteltével a jelenlegi pillanattól kezdve. Vagyis, az időzítő a hívás pillanatában indul.

  • WithDeadline(parent, deadline) egy olyan kontextust hoz létre, amely egy adott időpontban, a deadline (típus time.Time) megszűnik. Ez lehetővé teszi, hogy pontosan meghatározzuk, mikor jár le a kontextus.

Példa:

ctx1, cancel1 := context.WithTimeout(context.Background(), 5*time.Second)
// a ctx1 5 másodpercen belül megszűnik

deadline := time.Now().Add(5 * time.Second)
ctx2, cancel2 := context.WithDeadline(context.Background(), deadline)
// a ctx2 pontosan a deadline időpontjában szűnik meg

Ezért a WithTimeout akkor hasznos, ha egy időtartamot akarunk beállítani, míg a WithDeadline akkor, ha egy konkrét időpont a fontos.