Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What happens if you read a channel to nothing?

Can you read a goroutine channel into nothing? where does this channel read go to in this statement?

go func() {
  <-ctx.Done()
  logger.Errorf("canceled: %v", ctx.Err())
}()

Addition:

Would this code be any different than if I used the blank identifier

go func() {
  _ = <-ctx.Done()
  logger.Errorf("canceled: %v", ctx.Err())
}()
like image 929
Luis Felipe Moura Pereira De S Avatar asked Aug 01 '17 02:08

Luis Felipe Moura Pereira De S


1 Answers

Yes, you can do that.

It does not need to go anywhere.

Purpose of the Done channel usually is just to signal the done event, so the value is not relevant and can be ignored.

It is the same as when you call a function and don't assign the return values to variables.

Consider this:

func getInt() int {
    return 1
}

func main() {
    getInt()  // does not "go anywhere"
}

See this playground showing those examples:

https://play.golang.org/p/CA8P7gYpok

like image 132
eugenioy Avatar answered Oct 15 '22 12:10

eugenioy