Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Archives
Today
Total
관리 메뉴

Code Habit

Go ) select - time.After 본문

카테고리 없음

Go ) select - time.After

코드베어 2020. 6. 10. 08:16

select문에서 time.After 함수를 사용하면 시간 제한 처리를 할 수 있다.

 

time.After는 특정 시간이 지나면 현재 시간을 채널로 보낸다.

package main
 
import (
    "fmt"
    "time"
)
 
func main() {
    c1 := make(chan int)    // int형 채널 생성
    c2 := make(chan string// string형 채널 생성
 
    go func() {
        for {
            c1 <- 10                           // 채널 c1에 10을 보낸 뒤
            time.Sleep(100 * time.Millisecond) // 100 밀리초 대기
        }
    }()
 
    go func() {
        for { // 무한루프
            c2 <- "Hello, world!"              // 채널 c2에 Hello, world!를 보낸 뒤
            time.Sleep(500 * time.Millisecond) // 500 밀리초 대기
        }
    }()
 
    go func() {
        for { // 무한루프
            select {
            case i := <-c1:
                fmt.Println("c1 : ", i)
            case s := <-c2:
                fmt.Println("c2 : ", s)
            case <-time.After(50 * time.Millisecond): // 50 밀리초 후 현재 시간이 담긴 채널이 리턴됨
                fmt.Println("timeout")
            }
        }
    }()
    time.Sleep(10 * time.Second) // 10초 동안 프로그램 실행
}

이처럼 case에서는 time.After와 같이 받기 전용 채널을 리턴하는 함수를 사용할 수도 있다.

 

실행 결과

c1 :  10
c2 :  Hello, world!
timeout
c1 :  10
timeout
timeout
c1 :  10
timeout
c1 :  10
...