채널 타임아웃
복수 (혹은 단수) 채널을 기다리고 있을 때, 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") } }