Подскажите пожалуйста, посмотрел несколько туториалов, пытался понять, но так и не понял для чего нужен context? Во многих библиотеках обычно в методах нужно передать context, передаю просто вот так: context.TODO()
насколько это вообще правильно и все таки если можно простым языком обьяснить для чего нужен context?
Не третируйте. Сколько пытаюсь понять целесообразность использования контекста всё равно не могу понять. Можете объяснить где прям без него не обойтись? Ведь для отмены всегда можно прокинуть канал., не важно по какому событию. В чем же тогда приемущества?
Rerurk, вот у вас есть какое-то api по http и вы хотите чтобы при разрыве соединения отменялась остальная работа в обработчике, включая запросы в бд и т.д., то вам нужно использовать контексты.
Например, я передаю через контекст еще дополнительно и логгер с параметрами запроса.
context.TODO() предполагает, что потом будет передаваться контекст с более верхнего уровня по цепочке, если это не так, то используется context.Background().
ну как дополнительный пример - мой стандартный паттерн при работе с горутинами и каналами влючает в себя контроль выполнения через контекст:
func DoAsyncSomething(ctx context.Context) (chan int){
ch := make(chan int)
go func(){
defer close(ch)
// А вот с просто каналами мы не сможем ограничить выполнение работы по времени.
ctx, cancel := context.WithTimeout(ctx, 30*time.Second)
defer cancel()
writeToChannel(ctx, ch)
}()
return ch
}