Помимо операций с датой и временем пакет time
также предоставляет поддержку для выполнения кода через определенные промежутки времени или с задержкой. Обычно это проверка состояния приложения, его активности или любая другая периодическая работа, которая может быть имплементирована подобным образом.
Как запускать код с задержкой в Golang?
1. Создайте файл ticker.go
со следующим содержимым:
Рекомендуем вам супер TELEGRAM канал по Golang где собраны все материалы для качественного изучения языка. Удивите всех своими знаниями на собеседовании! 😎
Мы публикуем в паблике ВК и Telegram качественные обучающие материалы для быстрого изучения Go. Подпишитесь на нас в ВК и в Telegram. Поддержите сообщество Go программистов.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
package main import ( "fmt" "os" "os/signal" "time" ) func main() { c := make(chan os.Signal, 1) signal.Notify(c) ticker := time.NewTicker(time.Second) stop := make(chan bool) go func() { defer func() { stop <- true }() for { select { case <-ticker.C: fmt.Println("Тик") case <-stop: fmt.Println("Закрытие горутины") return } } }() // Блокировка, пока не будет получен сигнал <-c ticker.Stop() // Остановка горутины stop <- true // Ожидание до тех пор, пока не выполнится <-stop fmt.Println("Приложение остановлено") } |
2. Запустите код через go run ticker.go
в главном терминале;
3. Подождите несколько секунд, затем нажмите Ctrl + C для отправки SIGINT
сигнала;
4. Посмотрите на следующий результат:
1 2 3 4 5 6 7 |
Тик Тик Тик Тик Тик Закрытие горутины Приложение остановлено |
Ticker
содержит канал C
, что отвечает за периодический отсчет. Экземпляр остается с данным интервалом между каждым тиканьем. Интервал определяется через значение time.Duration
.
Код, что должен выполняться через промежутки, выполняется в бесконечном цикле в горутине. Чтение из канала Ticker
блокирует цикл до тех пор, пока тиканье не будет доставлено.
Обратите внимание, что Ticker
останавливается через вызов метода Stop
, канал C
не закрывается, он просто перестает поставлять тиканье. По этой причине предыдущий код содержит конструкцию select
, где канал остановки может доставить сигнал остановки. В таком случае можно добиться элегантного закрытия.
Администрирую данный сайт с целью распространения как можно большего объема обучающего материала для языка программирования Go. В IT с 2008 года, с тех пор изучаю и применяю интересующие меня технологии. Проявляю огромный интерес к машинному обучению и анализу данных.
E-mail: vasile.buldumac@ati.utm.md
Образование
Технический Университет Молдовы (utm.md), Факультет Вычислительной Техники, Информатики и Микроэлектроники
- 2014 — 2018 Universitatea Tehnică a Moldovei, ИТ-Инженер. Тема дипломной работы «Автоматизация покупки и продажи криптовалюты используя технический анализ»
- 2018 — 2020 Universitatea Tehnică a Moldovei, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»