채널 타임아웃
복수 (혹은 단수) 채널을 기다리고 있을 때, Timeout 기능을 넣어야 하는 경우가 있을 수 있다. 이때 아래 예제와 같이 time.After()를 사용하여 타임아웃 채널을 만든 후, 이를 select 문에 추가하면 지정된 시간이 경과한 후 타임아웃하는 기능을 쉽게 구현할 수 있다.
package main
import "time"
func main() {
ch1 := make(chan bool)
ch2 := make(chan bool)
go func(done chan bool) {
time.Sleep(5 * time.Second)
done <- true
}(ch1)
go func(done chan bool) {
time.Sleep(10 * time.Second)
done <- true
}(ch2)
// time.After()는 입력파라미터에 지정된 시간이
// 지나면 Ready되는 채널을 리턴한다
timeoutChan := time.After(1 * time.Second)
select {
case <-ch1:
println("run1")
case <-ch2:
println("run2")
// select 문 내에서 타임아웃 체크
case <-timeoutChan:
println("timeout")
}
}