Как прервать запущенные горутины GOLANG?
Канал — это объект соединения, которым горутины обмениваются данными. пример создания канала: package main import "fmt" func main() { var c chan int fmt.Println(c) } В Каналах существует операция закрытия, которая закрывает канал, так что операция отправки на канале не может выполняться. Через закрытый канал невозможно передать или принять какие- либо данные. Когда на канале выполняется операция приема, мы проверяем, закрыт ли канал или нет, и выходим из горутины, если канал закрыт.
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
wg.Add(1)
ch := make(chan string)
go func() {
for {
channel, ok := <-ch
if !ok {
fmt.Println("Shut Down")
defer wg.Done()
return
}
fmt.Println(channel)
}
}()
ch <- "Start"
ch <- "Processing"
ch <- "Finishing"
close(ch)
wg.Wait()
}
Вывод программы Go:
C:\Golang\goroutines>go run main.go
Start
Processing
Finishing
Shut Down
+1
+1
+1
+1
+1