더북(TheBook)

파이프라인의 각 단계에서 수행하는 작업을 같은 형태의 함수로 정의할 수 있다면, handler 함수를 매개변수로 받아 처리하는 pipe() 함수를 만들어서 사용할 수 있다.

func(Job) JobjobHandler 타입으로 정의하고, jobHandler를 매개변수로 받을 수 있게 pipe() 함수를 작성한다.

type Job struct{ name, log string }
type jobHandler func(Job) Job
 
func pipe(handler jobHandler, in <-chan Job) <-chan Job {
    out := make(chan Job, cap(in))
    go func() {
        for job := range in {
            out <- handler(job)
        }
        close(out)
    }()
    return out
}

main 함수에서는 pipe() 함수를 사용하여 handler 여러 개를 파이프라인으로 연결한다.

func main() {
    done := pipe(last, pipe(third, pipe(second, pipe(first, prepare()))))
    for d := range done {
        fmt.Println(d)
    }
}

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.