Ранее мы рассматривали, как можно выполнять код через периоды времени. В данной инструкции будет показано, как выполнить код с задержкой.
Как выполнить код с задержкой?
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, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»