Как остановить горутину в Golang?

Пользователь

от ian.heidenreich , в категории: Golang , 2 года назад

Как остановить горутину в Golang?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от ottilie.farrell , 2 года назад

@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

   // Вывод:
   // Текст снаружи.
   // Текст внутри горутины.
}

Пользователь

от judd , год назад

@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 секунд, что приведет к завершению горутины.