Don't Select The Default

From other languages, or even from Go's switch statement, you might be used to adding a default: case as a fallback.

Be wary of doing that in a select statement.

Black Friday Special:
My course Master Go is $60 off until Dec 2nd.
Hop over to AppliedGo.com for more info.
for {
	select {
	case <- ch1:
		do1()
	case ch2 <- val:
		do2()
	default:
		// do nothing
	}
}

The select semantics make each case block until one of the channels delivers a value or is ready to receive a value. If a default clause is present, it will be invoked if all other cases are blocked.

However, if the default case does nothing, you've just created a tightly spinning for loop!

While this empty default case does not affect the logic of the select statement, it will keep your CPU busy. So if in doubt, leave it out.

for {
	select {
	case <- ch1:
		do1()
	case ch2 <- val:
		do2()
	}
}