I have a select statement in a go routine that receives from two channels.
for {
fmt.Printf("Waiting for select statement ...
")
select {
case req := <-requestChan:
fmt.Printf("I got a request: %v
", req)
case <-doneChan:
fmt.Printf("serveDatabase: Got closing signal. Stop serving.
")
return
}
}
If the calling function sends to first channel twice and then to second channel everything works fine:
requestChan <- Db_request{ request: "Login", beehive: "yaylaswiese" }
requestChan <- Db_request{ request: "Signup", beehive: "aziz nezir" }
fmt.Printf("Sending true to the doneChannel
")
doneChan <- true
The console output (correctly) is:
> Waiting for select statement ...
> I got a request: {Login yaylaswiese}
> Waiting for select statement ...
> Sending true to the doneChannel
> I got a request: {Signup aziz nezir}
> Waiting for select statement ...
> serveDatabase: Got closing signal. Stop serving.
However, if I comment the second request like
requestChan <- Db_request{ request: "Login", beehive: "yaylaswiese" }
// requestChan <- Db_request{ request: "Signup", beehive: "aziz nezir" }
fmt.Printf("Sending true to the doneChannel
")
doneChan <- true
Then the output is
> Waiting for select statement ...
> I got a request: {Login yaylaswiese}
> Waiting for select statement ...
> Sending true to the doneChannel
So the doneChan is never received. I tried also to go into a endless loop after sending doneChan, but it has the same result.
What could that be?