golang 实现文件监控

package main

import (
	"fmt"
	"os"
	"path/filepath"

	"github.com/fsnotify/fsnotify"
)

func main() {
	// 初始化监控器
	w, err := fsnotify.NewWatcher()
	if err != nil {
		fmt.Println(err)
		return
	}
	defer w.Close()
	// 遍历当前文件夹下的目录,将所有的目录添加但监听列表
	filepath.Walk("./", func(path string, info os.FileInfo, err error) error {
		if info.IsDir() {
			path, err := filepath.Abs(info.Name())
			if err != nil {
				return err
			}
			w.Add(path)
		}
		return nil
	})

	for {
		select {
		case ev := <-w.Events:
			{
				if ev.Op&fsnotify.Create == fsnotify.Create {
					// 当为文件创建时
					fmt.Println(ev.Name, "created!!!")
					// 判断是否是文件夹
					info, err := os.Stat(ev.Name)
					if err != nil {
						fmt.Println(err)
					}
					// 如果是文件夹,添加到侦听列表
					if info.IsDir() {
						w.Add(ev.Name)
					}
				}
				if ev.Op&fsnotify.Write == fsnotify.Write {
					// 文件修改
					fmt.Println(ev.Name, "changed!!!") //
				}
				if ev.Op&fsnotify.Remove == fsnotify.Remove {
					// 文件删除
					fmt.Println(ev.Name, "removed!!!")
				}
				if ev.Op&fsnotify.Chmod == fsnotify.Chmod {
					// 修改权限
					fmt.Println(ev.Name, "chmod!!!")
				}
			}
		case err := <-w.Errors:
			{
				fmt.Println(err)
				return
			}
		}
	}
}