Как поставить задержку во время выполнения горутин?

В языке программирования Go задержку во время выполнения горутин можно осуществить несколькими способами.

1. Использование функции time.Sleep
Функция time.Sleep позволяет поставить задержку в выполнении текущей горутины на заданное количество времени. Например, чтобы поставить горутину на паузу в течение 1 секунды, можно использовать следующий код:

   package main
   
   import (
   	"fmt"
   	"time"
   )
   
   func main() {
   	fmt.Println("Начало выполнения")
   	
   	go func() {
   		time.Sleep(1 * time.Second)
   		fmt.Println("Горутина завершила выполнение")
   	}()
   	
   	fmt.Println("Конец выполнения")
   	
   	time.Sleep(2 * time.Second)
   }

2. Использование канала и блокировки
Другой способ поставить задержку в выполнении горутины - использовать канал и блокировку. Для этого можно создать канал без буфера и использовать операцию чтения из канала (блокирующую операцию) для задержки выполнения горутины. Ниже приведен пример кода:

   package main
   
   import (
   	"fmt"
   	"time"
   )
   
   func main() {
   	fmt.Println("Начало выполнения")
   	
   	done := make(chan bool)
   	
   	go func() {
   		time.Sleep(1 * time.Second)
   		fmt.Println("Горутина завершила выполнение")
   		done <- true
   	}()
   	
   	fmt.Println("Конец выполнения")
   	
   	<-done
   }

3. Использование синхронизации между горутинами
Третий способ - использовать механизм синхронизации между горутинами, например, wait group. Wait group позволяет ожидать завершение выполнения нескольких горутин перед продолжением основной программы. Для задержки выполнения горутины можно использовать wait group с нулевым счетчиком. Пример кода:

   package main
   
   import (
   	"fmt"
   	"sync"
   	"time"
   )
   
   func main() {
   	fmt.Println("Начало выполнения")
   	
   	var wg sync.WaitGroup
   	
   	wg.Add(1)
   	go func() {
   		time.Sleep(1 * time.Second)
   		fmt.Println("Горутина завершила выполнение")
   		wg.Done()
   	}()
   	
   	fmt.Println("Конец выполнения")
   	
   	wg.Wait()
   }

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