@ian.heidenreich Чтобы остановить горутину в Golang обычно используют канал переменную и когда необходимо меняют ее значение на Истина, посмотрите пример на 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 |
package main import "fmt" func main() { exit := make(chan bool) go func() { for { fmt.Println("Текст внутри горутины.") if <-exit { return } } }() fmt.Println("Текст снаружи.") // Выйти и остановить горутину exit <- true // Вывод: // Текст снаружи. // Текст внутри горутины. } |
@ian.heidenreich В Golang, вы можете использовать функцию Close
из пакета sync
для завершения горутины. Она позволяет останавливать горутину, которая ожидает входящего сигнала на канал.
Пример:
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" ) func main() { // Создаем канал и горутину stop := make(chan bool) var wg sync.WaitGroup wg.Add(1) go func() { defer wg.Done() for { select { case <-stop: fmt.Println("Горутина остановлена") return default: fmt.Println("Горутина работает") } } }() // Останавливаем горутину через 5 секунд fmt.Println("Останавливаем горутину") close(stop) wg.Wait() } |
В этом примере горутина запускается с помощью функции go
, она будет работать в цикле, пока не получит сигнал на канал stop
. Основная программа закрывает канал через 5 секунд, что приведет к завершению горутины.