package main import ( "fmt" "time" ) func main() { dataChannel := make(chan string) controlChannel := make(chan bool) go func() { time.Sleep(2 * time.Second) // Simulate some work dataChannel <- "Data from Worker 1" }() go func() { time.Sleep(3 * time.Second) controlChannel <- true // Signal from Worker 2 }() // Try to read from channels non-blockingly for a few iterations for i := 0; i < 5; i++ { select { case data := <-dataChannel: fmt.Printf("Received data: %s ", data) case control := <-controlChannel: fmt.Printf("Received control signal: %t ", control) default: fmt.Println("No channel ready, doing other work...") time.Sleep(500 * time.Millisecond) } } fmt.Println("Main routine finished.") }