У меня есть следующий код:
package main
import (
"fmt"
"time"
)
func main() {
ch := make(chan int)
ch2 := make(chan int)
go func(c chan int, c2 chan int) {
for {
select {
case v := <-c:
fmt.Println(v)
case v := <-c2:
fmt.Println(v)
default:
}
}
}(ch, ch2)
ch <- 1
close(ch)
close(ch2)
time.Sleep(10 * time.Second)
}
Когда я запускаю это, он печатает 1
на стандартный вывод, а затем продолжает печатать 0
. Почему это так?
Я знаю, что могу проверить, закрыт ли канал в моей процедуре, но я просто хочу узнать причину этого.
Кроме того, предположим, что я хочу выйти изПосле того, как все (несколько) каналов закрыты, это возможно? Я предполагал, что, как только все каналы будут закрыты, я могу потенциально выйти из программы в случае по умолчанию после закрытия всех каналов