I'm trying to write a simple program to find a certain file name within a directory tree. I use up to 30 coroutines. Is there anything wrong with this code or what needs to be improved? ``` import ( "fmt" "io/ioutil" "path/filepath" "sync" ) const tofind = "select-test.go" func main() { wg := sync.WaitGroup{} search("/Users/user/Documents", &wg) wg.Add(1) wg.Wait() } var permit = make(chan struct{}, 30) func search(dir string, wg *sync.WaitGroup) { permit <- struct{}{} defer func() { <-permit }() defer func() { wg.Done() }() items, err := ioutil.ReadDir(dir) if err != nil { fmt.Println(err.Error()) } for _, item := range items { if item.IsDir() { wg.Add(1) go search(filepath.Join(dir, item.Name()), wg) } else { if item.Name() == tofind { fmt.Println(filepath.Join(dir, item.Name())) } } } } ```