Sobes.tech
Junior — Middle

Jaký je rozdíl mezi použitím funkce WithTimeout a WithDeadline v kontextu kontroly doby běhu?

sobes.tech AI

Odpověď od AI

Funkce WithTimeout a WithDeadline v Go se používají k vytvoření kontextu s časovým omezením, ale liší se způsobem, jakým je toto omezení nastaveno:

  • WithTimeout(parent, timeout) vytvoří kontext, který se automaticky zruší po uplynutí doby timeout od aktuálního okamžiku. To znamená, že časovač se spustí při volání.

  • WithDeadline(parent, deadline) vytvoří kontext, který se zruší v konkrétním čase deadline (typu time.Time). To umožňuje přesně určit čas, kdy kontext vyprší.

Příklad:

ctx1, cancel1 := context.WithTimeout(context.Background(), 5*time.Second)
// ctx1 se zruší za 5 sekund od teď

deadline := time.Now().Add(5 * time.Second)
ctx2, cancel2 := context.WithDeadline(context.Background(), deadline)
// ctx2 se zruší přesně v okamžiku deadline

Proto je WithTimeout užitečné, když je třeba nastavit délku trvání, a WithDeadline, když je důležitý konkrétní čas.