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

영삼이
본문
✅ 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 처리를 넣어야 한다.
- 이전글슬라이스 append는 내부 구조를 이해해야 안전하다 25.03.28
- 다음글Go에서 시간 측정은 time.Since()가 정석이다 25.03.28
댓글목록
등록된 댓글이 없습니다.