介绍
本篇文章为大家展示了使用golang怎么对文件的变化进行监听,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
package 主要 import ( “log" “;github.com/fsnotify/fsnotify" ) func main (), { 观察家,err :=, fsnotify.NewWatcher () if err  !=, nil { log.Fatal (err) } defer watcher.Close () done :=, (chan bool) go func (), { for { select { case 事件,ok :=, & lt; -watcher.Events: if ! ok , { 返回 } log.Println(“事件:“,,事件) 时间==if event.Op& fsnotify.Write fsnotify.Write { log.Println (“modified 文件:“,,event.Name) } 呃,case ok :=, & lt; -watcher.Errors: if ! ok , { 返回 } log.Println(“错误:“,,呃) } } }() 时间=err watcher.Add (“/tmp/foo") if err  !=, nil { log.Fatal (err) } & lt;完成 }
<>强补充:golang监控文件变化,git自动提交代码强>
代码如下:
如果文件有变动,且10分钟内,没有再次变动,则提交代码
package main import ( ,“fmt" ,_ “fmt" ,“;github.com/fsnotify/fsnotify" ,“log" ,“os" ,“os/exec" ,“路径/filepath" ,“time" ) ,//if 从而conditions ,断开连接,满足,execute 从而shell 脚本 func execCmd (), { ,cmd :=, exec.Command(“/根/nfs_bak_pro/nfs.git.sh") ,err :=, cmd.Run () ,if err  !=, nil { ,fmt.Println (“Execute  Command 失败:“,+,err.Error ()) ,返回 ,} ,fmt.Println (“Execute  Command 完成了!”) } ,//handle folder  files changed 事件 func watchFiles (watcher * fsnotify.Watcher, ch chan int64), { ,for { ,select { ,case ev :=, & lt; -watcher.Events:, { ,isNotify :=false , ,if ev.Op ,, fsnotify.Create ==, fsnotify.Create { log.Println才能(“create :,,,, ev.Name) isNotify 才能=,真的 , 文件,才能,err :=, os.Stat (ev.Name) if 才能;err ==, nil ,,, file.IsDir (), { watcher.Add才能(ev.Name) fmt.Println才能(“add  watch ,:,“,, ev.Name) ,,} ,} , ,if ev.Op ,, fsnotify.Remove ==, fsnotify.Remove { log.Println才能(“delete :,,,, ev.Name) isNotify 才能=,真的 err 才能;:=,watcher.Remove (ev.Name) fmt.Printf才能(“remove 看:% s,,犯错:,% v \ n",, ev.Name,,呃) ,} , ,if ev.Op ,, fsnotify.Rename ==, fsnotify.Rename { log.Println才能(“rename :,,,, ev.Name) if “才能”,!=,ev.Name { isNotify 才能=,真的 err 才能;:=,watcher.Remove (ev.Name) fmt.Printf才能(“remove 看:% s,,犯错:,% v \ n",, ev.Name,,呃) ,,} ,} , ,if isNotify  { ch 才能;& lt;作用;time.Now () .Unix () ,} ,} ,case err :=, & lt; -watcher.Errors:, { ,log.Println (“watcher  error ,:,“,,呃) ,返回 ,} ,} ,} } ,//if folder  event ,, execute 从而shell script after 10分钟 func watchTime (ch chan  int64), { ,var timer * time.Timer ,for { ,select { ,case & lt;安康;ch: { ,if nil  !=, timer { log.Printf才能(“reset timer") timer.Stop才能() ,}=,,timer  time.NewTimer (10, *, 60, *, time.Second) ,go func (), { & lt; -timer.C才能 execCmd才能() ,}() ,} ,} ,} } ,//watch 从而,folder 以及sub 文件夹 func WatchDir (watcher * fsnotify.Watcher, dir 字符串),{ ,filepath.Walk (dir, func(字符串,path info os.FileInfo,, err 错误),error { ,if info.IsDir (), { ,道路,err :=, filepath.Abs(路径) ,if err  !=, nil { return 犯错 ,}=,,err  watcher.Add(路径) ,if err  !=, nil { return 犯错 ,} ,} return nil ,}) }, , func main (), { ,notifyCh :=, (chan int64) 观察者的不同之处是,err :=, fsnotify.NewWatcher () ,if err  !=, nil { ,log.Fatal (err) ,} ,defer watcher.Close () , null null null null null null null null null null null null使用golang怎么对文件的变化进行监听