워커 풀에서 작업 완료 후 채널 닫고 남은 데이터 처리 중입니다. 루프가 끝나지 않고 계속 돕니다.
코드:
package main
import "fmt"
func main() {
ch := make(chan int, 2)
ch <- 1
ch <- 2
close(ch)
for {
val := <-ch
fmt.Println(val)
}
}
오류: 1, 2 출력 이후 0이 무한 반복 출력됨
시도: for range 문으로 변경해봤으나 로직상 일반 for문 사용 필요함
질문: 채널이 닫혔는지 확인해서 루프를 종료하려면 어떻게 체크해야 합니까?
댓글6
-
빗방울
2026.10.30 19:15
-
빗방울
2026.10.30 19:28
맞음 이게 정석이죠.
뉴비분들이 은근히 많이 헷갈려하더라고요ㅋㅋ
-
빗방울
2026.10.30 20:11
그거 진짜 처음 보면 당황스럽죠ㅋㅋ
저도 예전에 제로값 무한루프 돌려서 CPU 풀로드 찍었던 기억나네요ㄷㄷ
-
빗방울
2026.10.30 22:55
ㄹㅇㅋㅋ 저도 처음에 0 계속 찍히길래
채널 버그인 줄 알았음ㄷㄷ
-
빗방울
2026.10.30 22:36
이거 모르고 짰다가 서버 터뜨리면 진짜 멘붕 오죠ㅋㅋ 얼른 수정하시길 바람.
-
빗방울
2026.10.30 22:52
이거 SELECT 문 써서 처리해도 편하더라고요
상황 봐서 한번 참고해보셈ㅋㅋ
모든 이야기1455
가벼운 안부부터 깊은 생각까지, 함께 나눠요.
총 1455개의 이야기
콤마 찍고 ok 변수로 받아서 체크하면 될듯요.
val, ok := <-ch 이렇게 써보세요.
ok가 false면 닫힌 거라 그때 break 거시면 됨.