💬 Что из себя представляют сигналы отмены в контексте пакета context?
Передача сигнала отмены — один из юзкейсов контекстов в Go. Допустим, нужно создать приложение, которое вызывает
Наконец, когда происходит возврат из
Когда происходит возврат из
Передача сигнала отмены — один из юзкейсов контекстов в Go. Допустим, нужно создать приложение, которое вызывает
CreateFileWatcher(ctx context.Context, filename string)
внутри другой горутины. Эта функция создает file watcher, который постоянно читает файл и отслеживает его обновления. Когда предоставленный контекст становится неактуальным или отменяется, эта функция обрабатывает его, чтобы закрыть дескриптор файла.Наконец, когда происходит возврат из
main
, мы хотим, чтобы все обрабатывалось корректно путем закрытия этого файлового дескриптора. Поэтому нам нужно передать сигнал. Возможный подход — использовать context.WithCancel
, возвращающий контекст (возвращается первая переменная), который отменяется после вызова функции cancel
(возвращается вторая переменная): func main() {
ctx, cancel := context.WithCancel(context.Background()) // создание контекста, который может быть отменен
defer cancel() // откладываем вызов cancel
go func() {
CreateFileWatcher(ctx, "foo.txt") // вызов функции с использованием созданного контекста
}()
// ...
}
Когда происходит возврат из
main
, происходит и вызов функции cancel
для отмены контекста, переданного в CreateFileWatcher
, — чтобы дескриптор файла корректно закрылся.