Рассмотрим следующий go playgroundТупик, когда нерест goroutine в цикле
package main
import "fmt"
func main() {
var chan_array [2]chan int
chan1 := make(chan int)
chan2 := make(chan int)
chan_array[0] = chan1
chan_array[1] = chan2
for i := 0; i < 2; i++ {
go func() {
select {
case x := <- chan_array[i]:
if (x == 0) {
return
}
fmt.Println(x)
}
}()
}
chan1<- 1
chan2<- 2
chan1<- 0
chan2<- 0
}
Код выше пытается создать 2 работающих goroutines с этим прослушивает канал для сигнализации печати или близко.
Но приведенный выше код работает в мертвой блокировке.
Я точно не знаю, почему
Может кто-то указать на мою ошибку?
Благодаря
Возможный дубликат [? Почему Golang ручка закрытия по-разному в goroutines] (http://stackoverflow.com/questions/25919213/why-does-golang-handle-closures -differently-in-goroutines) –