Challenge - 5 Problems
Select Mastery Badge
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate2:00remaining
Output of select with default case
What is the output of this Go program?
Go
package main import ( "fmt" "time" ) func main() { ch := make(chan int) select { case val := <-ch: fmt.Println("Received", val) default: fmt.Println("No value received") } }
Attempts:
2 left
💡 Hint
Think about what happens when the channel has no data and the select has a default case.
✗ Incorrect
The select statement tries to receive from the channel ch. Since ch is empty and no goroutine sends data, the receive would block. But because there is a default case, the select does not block and immediately executes the default case, printing "No value received".
❓ Predict Output
intermediate2:00remaining
Behavior of select without default case
What happens when this Go program runs?
Go
package main import ( "fmt" ) func main() { ch := make(chan int) select { case val := <-ch: fmt.Println("Received", val) } }
Attempts:
2 left
💡 Hint
Consider what happens when select waits on a channel with no sender and no default case.
✗ Incorrect
The select waits to receive from ch, but no goroutine sends data. Without a default case, the select blocks forever, causing a deadlock.
🔧 Debug
advanced2:00remaining
Why does this select with default case print twice?
This Go program prints "default" twice. Why?
Go
package main import ( "fmt" ) func main() { ch := make(chan int) for i := 0; i < 2; i++ { select { case val := <-ch: fmt.Println("Received", val) default: fmt.Println("default") } } }
Attempts:
2 left
💡 Hint
Think about what happens when the channel is empty and select has a default case inside a loop.
✗ Incorrect
Each iteration of the loop runs the select. Since the channel ch is empty and no goroutine sends data, the receive case is not ready. The default case runs immediately both times, printing "default" twice.
🧠 Conceptual
advanced1:30remaining
Purpose of default case in select
What is the main purpose of the default case in a Go select statement?
Attempts:
2 left
💡 Hint
Think about how select behaves when no channel operation can proceed.
✗ Incorrect
The default case runs immediately if no other channel operation is ready, so the select does not block. This allows the program to continue without waiting.
❓ Predict Output
expert2:30remaining
Output of select with multiple cases and default
What is the output of this Go program?
Go
package main import ( "fmt" "time" ) func main() { ch1 := make(chan int) ch2 := make(chan int) go func() { time.Sleep(50 * time.Millisecond) ch2 <- 42 }() select { case val := <-ch1: fmt.Println("Received from ch1", val) case val := <-ch2: fmt.Println("Received from ch2", val) default: fmt.Println("No channel ready") } }
Attempts:
2 left
💡 Hint
Consider the timing of the goroutine sending to ch2 and when select runs.
✗ Incorrect
The select runs immediately before the goroutine sends to ch2 (after 50ms). Since ch1 is empty and ch2 has no value yet, no case is ready. The default case runs, printing "No channel ready".