find() 함수
find() 함수는 path 디렉터리 안에 있는 모든 파일을 검색해서 결과를 out 채널로 전송한다.
import "filepath" const BUF_SIZE = 1000 func find(path string) <-chan string { out := make(chan string, BUF_SIZE) go func() { filepath.Walk(path, func(file string, info os.FileInfo, err error) error { out <- file return nil }) close(out) }() return out }
실제 작업은 고루틴으로 동작하고, 각 진행 결과는 out 채널을 통해 다음 단계로 전달된다. 각 작업이 대기 없이 연속으로 진행되도록 out 채널을 버퍼드 채널로 만들었다. find() 함수는 고루틴을 동작시킨 후 바로 out 채널을 반환한다.
filepath.Walk() 함수는 첫 번째 매개변수로 전달된 path의 파일과 디렉터리를 모두 순회하고, 두 번째 매개변수로 전달된 함수를 수행한다. 방금 본 코드에서는 path에 있는 파일과 디렉터리를 모두 out 채널에 그대로 전송한다. 모든 파일과 디렉터리에 대한 처리를 완료하면 out 채널을 닫는다.