select 문에서 default 케이스를 지정하면 case에 지정된 모든 채널이 사용 가능 상태가 아닐 때 default 케이스를 수행한다.
c1 := make(chan int) c2 := make(chan int) /* … */ select { case <-c1: // c1 채널에 값이 전달됐을 때 수행 case <-c2: // c2 채널에 값이 전달됐을 때 수행 default: // 케이스에서 대기하고 있는 채널에 값이 전달되지 않았을 때 수행 }
default 케이스는 select 문에서 case의 채널들이 사용 가능 상태가 아닐 경우, 대기(block)하지 않고 바로 무언가를 처리해야 할 때 사용한다.
package main import ( “fmt” “time” ) func main() { tick := time.Tick(100 * time.Millisecond) boom := time.After(500 * time.Millisecond) for { select { case <-tick: fmt.Println(“tick.”) case <-boom: fmt.Println(“BOOM!”) return default: fmt.Println(” .”) time.Sleep(50 * time.Millisecond) } } }