process() 함수에서 처리하는 작업이 리소스를 많이 사용하는 무거운 작업이라면 타임아웃 메시지를 process() 함수로 전달하여 타임아웃 후에 작업을 바로 종료하게 하는 것이 좋다.
다음은 process() 함수에 타임아웃 메시지를 전달하는 예제다.
▼ timeout.go
package main import ( “fmt” “time” ) func main() { quit := make(chan struct{}) done := process(quit) timeout := time.After(1 * time.Second)
select { case d := <-done: fmt.Println(d) case <-timeout: fmt.Println(“Time out!”) quit <- struct{}{} } } func process(quit <-chan struct{}) chan string { done := make(chan string) go func() { go func() { time.Sleep(10 * time.Second) // heavy job
done <- “Complete!” }()
<-quit return }() return done }