package watcher import ( "log" "github.com/fsnotify/fsnotify" ) type FileHandler func(path string) func WatchDirs(dirs []string, handler FileHandler) error { watcher, err := fsnotify.NewWatcher() if err != nil { return err } defer watcher.Close() for _, d := range dirs { if err := watcher.Add(d); err != nil { return err } } for { select { case event := <-watcher.Events: if event.Op&(fsnotify.Create|fsnotify.Write) != 0 { handler(event.Name) } case err := <-watcher.Errors: log.Printf("Watcher error: %v\n", err) } } }