Ранее мы рассматривали, как можно выполнять код через периоды времени. В данной инструкции будет показано, как выполнить код с задержкой.
Как выполнить код с задержкой?
1. Создайте файл delay.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 |
package main import ( "fmt" "sync" "time" ) func main() { t := time.NewTimer(3 * time.Second) fmt.Printf("Начало ожидания - %v\n", time.Now().Format(time.UnixDate)) <-t.C fmt.Printf("Код выполнен - %v\n", time.Now().Format(time.UnixDate)) wg := &sync.WaitGroup{} wg.Add(1) fmt.Printf("Начало ожидания для AfterFunc - %v\n", time.Now().Format(time.UnixDate)) time.AfterFunc(3*time.Second, func() { fmt.Printf("Код выполнен для AfterFunc - %v\n", time.Now().Format(time.UnixDate)) wg.Done() }) wg.Wait() fmt.Printf("Ожидание time.After - %v\n", time.Now().Format(time.UnixDate)) <-time.After(3 * time.Second) fmt.Printf("Итог кода - %v\n", time.Now().Format(time.UnixDate)) } |
2. Запустите код через go run delay.go в терминале;
3. Посмотрите на результат:
|
1 2 3 4 5 6 |
Начало ожидания - Tue Nov 10 23:00:00 UTC 2009 Код выполнен - Tue Nov 10 23:00:03 UTC 2009 Начало ожидания для AfterFunc - Tue Nov 10 23:00:03 UTC 2009 Код выполнен для AfterFunc - Tue Nov 10 23:00:06 UTC 2009 Ожидание time.After - Tue Nov 10 23:00:06 UTC 2009 Итог кода - Tue Nov 10 23:00:09 UTC 2009 |
Для единичного выполнения кода с задержкой можно использовать Timer из пакета time. Концепт данного процесса аналогичен тому, что мы задействовали в инструкции для «Запуска разных блоков кода через промежутки времени».
Timer содержит канал C, что поставляет сигналы тиканья через данные промежутки времени. После этого через этот канал не поставляется ни один тик.
Такая же функциональность поставляет функция AfterFunc из пакета time. Это просто упрощает использование. Обратите внимание, что здесь не требуется канал. Код примера использует sync.WaitGroup для ожидания, пока функция не будет выполнена.
В предыдущем примере time.After является последней опцией. Функция возвращает канал, что поставляет сигнал тиканья после данного промежутка. Обратите внимание на разницу между функциями Timer и After. Timer является переиспользуемой структурой (она предоставляет методы Stop и Reset). С другой стороны, функция After может использоваться только один раз, так как она не предоставляет никакой опции для перезапуска.

Администрирую данный сайт с целью распространения как можно большего объема обучающего материала для языка программирования Go. В IT с 2008 года, с тех пор изучаю и применяю интересующие меня технологии. Проявляю огромный интерес к машинному обучению и анализу данных.
E-mail: vasile.buldumac@ati.utm.md
Образование
Технический Университет Молдовы (utm.md), Факультет Вычислительной Техники, Информатики и Микроэлектроники
- 2014 — 2018 Universitatea Tehnică a Moldovei, ИТ-Инженер. Тема дипломной работы «Автоматизация покупки и продажи криптовалюты используя технический анализ»
- 2018 — 2020 Universitatea Tehnică a Moldovei, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»