더북(TheBook)

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)
        }
    }
}

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.