Golang - for ... range with channel

00_8_3·2023년 3월 28일
0

Go

목록 보기
8/10

for range ch

  • range에 채널이 있는 경우 블락이 된다. (무한대기)
  • 채널 종료를 통해 블락을 해제할 수 있다.
  • 타이머 종료는 timer.Stop()으로 가능하다.
package main

import (
	"fmt"
	"time"
)

func testForChannel(ch <-chan int){
    for obj := range ch {
        fmt.Println(obj)
    }
}

func testForTimer(ch <-chan time.Time){
    for obj := range ch {
        fmt.Println(obj)
    }
}

func main() {

    timer := time.NewTicker(2 * time.Second)

    ch := make(chan int)
    go testForChannel(ch)
    go testForTimer(timer.C)
    
    ch <- 1
    time.Sleep(2 * time.Second)
    ch <- 2
    time.Sleep(10 * time.Second)
    timer.Stop()

    // main 스레드 종료 방지
    for{}
    
}

0개의 댓글