Timeouts은 외부 리소스를 연결하거나 실행 시간을 제한해야하는 프로그램에서 중요합니다. Go에서 타임아웃 구현은 채널과 |
package main
|
import "time"
import "fmt"
|
|
func main() {
|
|
이번 예제에선, 2초 후에 |
c1 := make(chan string, 1)
go func() {
time.Sleep(time.Second * 2)
c1 <- "result 1"
}()
|
다음은 |
select {
case res := <-c1:
fmt.Println(res)
case <-time.After(time.Second * 1):
fmt.Println("timeout 1")
}
|
만약 타움아웃을 3초로 늘리면, |
c2 := make(chan string, 1)
go func() {
time.Sleep(time.Second * 2)
c2 <- "result 2"
}()
select {
case res := <-c2:
fmt.Println(res)
case <-time.After(time.Second * 3):
fmt.Println("timeout 2")
}
}
|
이 프로그램을 실행하면 첫 연산은 타임아웃되고 두번째 연산은 성공하는걸 볼 수 있습니다. |
$ go run timeouts.go
timeout 1
result 2
|
|
다음 예제: 비동기 채널 연산.