Рассмотрим два примера:
Первый:
package main
import "fmt"
func main() {
c := make(chan int)
go func(){
c <- 1
}()
go func(){
c <- 2
}()
select {
case <-c:
fmt.Println("<-c:", <-c)
fmt.Println("<-c:", <-c)
}
}
Насколько я знаю, что должно произойти: две подпрограммы появляются и пишут в один и тот же канал, один из них блокируети ждет чтения главной программы.
Но я не понимаю, что происходит со второй программой. Блокирует ли он, потому что канал небуферизован, и он не может содержать два значения design .
С этим фрагментом я захожу в тупик. Я нашел похожий вопрос здесь .
И если да, то как этот код работает тогда?
package main
import "fmt"
func main() {
c := make(chan int)
go func(){
c <- 1
}()
go func(){
c <- 2
}()
select {
case forget := <-c:
fmt.Println("forget:", forget)
fmt.Println("<-c:", <-c)
}
}