For Select
Si main es una gorutina por defecto, porque se envía la señal desde main, no hay peligro de que se ejecute primero que el number en el select?
main
import (
"fmt"
"time"
)
func main() {
number := make(chan int)
signal := make(chan struct{})
go receive(signal, number)
send(number)
signal <- struct{}{} // se 'activa' la señal
}
func send(number chan<- int) {
number <- 100
number <- 200
number <- 300
number <- 400
time.Sleep(time.Nanosecond * 1)
number <- 500
}
func receive(signal <-chan struct{}, number <-chan int) {
for {
select {
case v := <-number:
fmt.Println(v)
case <-signal: // podría leerse primero la señal y terminar la ejecución
return
default:
fmt.Println("Empty")
}
}
//
}
