파이프라인의 각 단계에서 수행하는 작업을 같은 형태의 함수로 정의할 수 있다면, handler 함수를 매개변수로 받아 처리하는 pipe() 함수를 만들어서 사용할 수 있다.
func(Job) Job을 jobHandler 타입으로 정의하고, 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) } }