goroutine, channel 과 함께 한 팀을 이루고있는
select 문을 한번 보자.
ch 에 데이터가 들어오기를 기다린다.
그런데, 계속기다리는것이 아니라, 일정시간동안(timeout )만 기다린다.
아래 코드에는 ch 에 데이터를 쓰는 부분이 없지만,
실제 코드 실행중에는 ch 에 데이터가 먼저들어올지,
timeout 이 먼저 발생할지, 알수없는 상황이라고 가정해보자.
사건발생의 임의성을 select 문으로 깔끔하게 묶어냈다.
package main
import "fmt"
import "time"
func main() {
ch := make( chan int)
timeout := make( chan bool, 1)
go func() {
time.Sleep( 1 * time.Second)
timeout <- true
} ()
select {
case <-ch:
fmt.Println("read from ch.")
case <-timeout:
fmt.Println("timeout.")
}
}
코드 출처:
http://golang.org/doc/articles/concurrency_patterns.html