더북(TheBook)

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 채널을 닫는다.

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