PHpullh
학습 라이브러리/Go/닫힌 채널 처리

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 메타데이터를 가집니다.