В предыдущей инструкции мы рассмотрели концепт выполнения кода с определенной задержкой. Такой же концепт можно использовать для имплементации таймаута для операций, что запускаются на долгое время. В данной инструкции показано, как это можно сделать.

Как поставить лимит на время выполнения программы в Golang?

1. Создайте файл timeout.go со следующим содержимым:

Форум Гоферов

Мы работаем над форумом для программистов на Golang. Очень нужны модераторы которые хотят помочь с ответами для новичков и помочь в развитии Go-сообщества.

Go на Форум

Уроки, статьи и Видео

Мы публикуем в паблике ВК и Telegram качественные обучающие материалы для быстрого изучения Go. Подпишитесь на нас в ВК и в Telegram. Поддержите сообщество Go программистов.

Go в ВК Go в Telegram

2. Запустите код через go run timeout.go в терминале;
3. Посмотрите на результат:

Таймаут для долгих операций в коде выше имплементирован через использование функции time.After, что предоставляет повторяющийся канал за определенный промежуток времени.

Сама по себе операция использует оператор, что выбирает между каналом time.After и опцией по умолчанию, что выполняет операцию.

Обратите внимание, что вам нужно позволить коду периодически читать из канала time.After для выяснения превышен таймаут или нет. В противном случае, если ветвь кода по умолчанию будет полностью блокировать выполнение, то не будет способа выяснить, истек ли таймаут и завершить операцию.

В примере мы используем функцию time.After, но функция Timer также может использоваться подобным способом. Встроенные библиотеки также используют context.WithTimeout для имплементации функциональности таймаута.