" Понимание контекстного пакета в golang " из Parikshit Agnihotry упоминает:
context.WithCancel(parent Context) (ctx Context, cancel CancelFunc)
Эта функция создаетновый контекст, полученный из родительского контекста, который передается.
Родитель может быть фоновым контекстом или контекстом, который был передан в функцию.
Возвращает производный контекст и функцию отмены.
Только функция, которая создает это, должна вызывать функцию отмены для отмены этого контекста.
Вы можете обойти функцию отмены, если хотите, но это настоятельно не рекомендуется.Это может привести к тому, что инициатор отмены не поймет, каким может быть последующее влияние отмены контекста.Из этого могут быть и другие контексты, которые могут привести к неожиданному поведению программы.Короче говоря, НИКОГДА не передавайте функцию отмены.
ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(2 * time.Second))
context.WithDeadline(parent Context, d time.Time) (ctx Context, cancel CancelFunc)
Эта функция возвращает производный контекст от своего родителя, который отменяется при превышении срока или вызывается функция отмены.
Например, вы можете создать контекст, который будет автоматически отменяться в определенное время в будущем, и передавать его в дочерних функциях.
Когда этот контекст отменяется из-за истечения срока,все функции, получившие контекст, получают уведомление о прекращении работы и возврате.
ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(2 * time.Second))
context.WithTimeout(parent Context, timeout time.Duration) (ctx Context, cancel CancelFunc)
Эта функция аналогична context.WithDeadline
.
Разница в том, что в качестве входных данных используется длительность времени вместо объекта времени .
Эта функция возвращает производный контекст, который отменяется при вызове функции отмены или продолжительности тайм-аута.превышено.
ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(2 * time.Second))
почему не печатается "готово" при использовании с Cancel, но с помощью TimeTime делает
Возможно, потому что программа Go ужевыйдет, прежде чем программа успеет подтвердить "Готово".