У меня есть простой пример, и я не знаю, как это исправить, чтобы он работал так, как я ожидал.
Должно быть напечатано Result: 30
, но на экране появилось: Неустранимая ошибка: все программы спят - тупик!
Я думаю, что проблема здесь заключается в утверждении for val := range data
.Он все еще ждет получения данных, когда канал данных был пуст.Но я не знаю, как это решить, пожалуйста, помогите мне.
package main
import (
"fmt"
)
func senderSide(data chan int) {
num := 5
for i := 1; i <= num; i++ {
data <- i
}
// close(data) //panic: send on closed channel if uncomment it
}
func receiverSide(data chan int, resp chan int) {
sum := 0
for val := range data {
sum += val
}
resp <- sum
}
func main() {
data := make(chan int)
resp := make(chan int)
go senderSide(data)
go senderSide(data)
go receiverSide(data, resp)
result := <-resp
fmt.Printf("Result: %v\n", result) //result = 30
}