개발 지식

개발 지식

Go ✅ select 문에 default 없으면 고루틴이 멈출 수 있다

페이지 정보

profile_image
영삼이
0건 122회 25-03-28 15:08

본문

✅ select 문에 default 없으면 고루틴이 멈출 수 있다

채널 대기 중 블로킹 방지하는 안전장치

Go에서 여러 채널을 동시에 기다릴 땐 select를 쓴다:

select {
case msg := <-ch:
	fmt.Println("받음:", msg)
}

하지만 위 코드에서 ch에 값이 없으면
영원히 대기 상태가 된다 → 고루틴 블로킹


✅ 해결: default 추가로 비동기 처리

select {
case msg := <-ch:
	fmt.Println("받음:", msg)
default:
	fmt.Println("데이터 없음")
}
  • default가 있으면 즉시 빠져나옴

  • 고루틴이 멈추지 않고 계속 동작 가능


✔️ select는 강력하지만
default 없으면 블로킹 발생 가능
필요할 땐 반드시 fallback 처리를 넣어야 한다.

댓글목록

등록된 댓글이 없습니다.