GO · 고루틴/채널
채널 방향과 소유권
채널 방향(chan, )으로 읽기/쓰기 권한을 제한합니다. 데이터 흐름을 명확히 합니다.
고루틴/채널중급channel-directionsend-onlyreceive-onlyownership
핵심 설명
채널 방향(chan, )으로 읽기/쓰기 권한을 제한합니다. 데이터 흐름을 명확히 합니다.
Go code
package main
import "fmt"
// 송신 전용: chan<-
func producer(out chan<- int) {
for i := 0; i < 5; i++ {
out <- i
}
close(out) // 생산자가 채널 소유 → 닫기 책임
}
// 수신 전용: <-chan
func consumer(in <-chan int) {
for v := range in {
fmt.Println("수신:", v)
}
}
// 변환: 수신 → 처리 → 송신
func transform(in <-chan int, out chan<- string) {
defer close(out)
for v := range in {
out <- fmt.Sprintf("#%d", v)
}
}
func main() {
nums := make(chan int, 5)
strs := make(chan string, 5)
go producer(nums)
go transform(nums, strs)
for s := range strs {
fmt.Println(s)
}
}학습 팁
채널을 만든 고루틴(생산자)이 닫기 책임을 가집니다. 수신자가 채널을 닫으면 생산자에서 패닉이 발생합니다.
주의할 점
이미 닫힌 채널에 데이터를 보내면 panic: send on closed channel이 발생합니다. 닫기 책임은 반드시 하나의 고루틴에만 부여하세요.
자주 묻는 질문
채널 방향과 소유권란 무엇인가요?
채널 방향( chan , )으로 읽기/쓰기 권한을 제한합니다. 데이터 흐름을 명확히 합니다.
채널 방향과 소유권 학습 시 주의할 점은 무엇인가요?
이미 닫힌 채널에 데이터를 보내면 panic: send on closed channel 이 발생합니다. 닫기 책임은 반드시 하나의 고루틴에만 부여하세요.