GO · 고루틴/채널
닫힌 채널 처리
닫힌 채널에서 수신하면 제로 값을 반환합니다. 콤마-ok 패턴으로 닫힘을 감지합니다.
고루틴/채널중급closed-channelcomma-okrangebroadcast
핵심 설명
닫힌 채널에서 수신하면 제로 값을 반환합니다. 콤마-ok 패턴으로 닫힘을 감지합니다.
Go code
package main
import "fmt"
func main() {
ch := make(chan int, 3)
ch <- 10
ch <- 20
close(ch)
// 콤마-ok 패턴
v, ok := <-ch
fmt.Println(v, ok) // 10 true
v, ok = <-ch
fmt.Println(v, ok) // 20 true
v, ok = <-ch
fmt.Println(v, ok) // 0 false (닫힘)
// range는 자동으로 닫힘 감지
ch2 := make(chan string, 2)
ch2 <- "a"
ch2 <- "b"
close(ch2)
for msg := range ch2 {
fmt.Println(msg)
}
// 닫힌 채널로 브로드캐스트
done := make(chan struct{})
for i := 0; i < 3; i++ {
go func(id int) {
<-done // 모든 고루틴이 동시에 깨어남
fmt.Printf("고루틴 %d 시작\n", id)
}(i)
}
close(done) // 브로드캐스트!
}학습 팁
close(ch)는 대기 중인 모든 수신자를 깨우므로 브로드캐스트 신호로 활용할 수 있습니다.
주의할 점
닫힌 채널에 send하면 패닉, 다시 close해도 패닉입니다. 채널은 한 번만 닫으세요.
자주 묻는 질문
닫힌 채널 처리란 무엇인가요?
닫힌 채널에서 수신하면 제로 값을 반환합니다. 콤마-ok 패턴으로 닫힘을 감지합니다.
닫힌 채널 처리 학습 시 주의할 점은 무엇인가요?
닫힌 채널에 send 하면 패닉, 다시 close 해도 패닉입니다. 채널은 한 번만 닫으세요.
Continue Learning
Go 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.