GO · 고루틴/채널
채널 파이프라인
채널로 연결된 단계들이 동시에 실행되는 파이프라인 패턴입니다. 각 단계가 독립 고루틴에서 동작합니다.
고루틴/채널고급pipelinechannelgoroutinestreaming
핵심 설명
채널로 연결된 단계들이 동시에 실행되는 파이프라인 패턴입니다. 각 단계가 독립 고루틴에서 동작합니다.
Go code
package main
import "fmt"
func generate(nums ...int) <-chan int {
out := make(chan int)
go func() {
defer close(out)
for _, n := range nums { out <- n }
}()
return out
}
func square(in <-chan int) <-chan int {
out := make(chan int)
go func() {
defer close(out)
for n := range in { out <- n * n }
}()
return out
}
func filter(in <-chan int, pred func(int) bool) <-chan int {
out := make(chan int)
go func() {
defer close(out)
for n := range in {
if pred(n) { out <- n }
}
}()
return out
}
func main() {
// 파이프라인: 생성 → 제곱 → 필터(50 이하)
pipeline := filter(
square(generate(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)),
func(n int) bool { return n <= 50 },
)
for v := range pipeline {
fmt.Println(v) // 1 4 9 16 25 36 49
}
}학습 팁
각 단계에서 defer close(out)를 사용하면 상류 단계가 완료될 때 하류로 자동 전파됩니다.
주의할 점
파이프라인에서 소비자가 조기 종료하면 생산자가 블로킹됩니다. context로 취소 신호를 전달하세요.
자주 묻는 질문
채널 파이프라인란 무엇인가요?
채널로 연결된 단계들이 동시에 실행되는 파이프라인 패턴입니다. 각 단계가 독립 고루틴에서 동작합니다.
채널 파이프라인 학습 시 주의할 점은 무엇인가요?
파이프라인에서 소비자가 조기 종료하면 생산자가 블로킹됩니다. context 로 취소 신호를 전달하세요.
Continue Learning
Go 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.