使用fsnotify库实现Go文件监控,支持跨平台监听文件创建、写入、删除等操作;2. 通过go get安装依赖并编写程序初始化Watcher,监听指定文件或目录事件。

在Go语言中实现文件监控功能,通常使用第三方库 fsnotify,因为标准库没有提供跨平台的文件系统事件监听机制。fsnotify 能监听文件或目录的创建、写入、删除、重命名等操作,适用于日志监控、配置热更新等场景。
使用 go mod 管理依赖,执行以下命令安装:
go get github.com/fsnotify/fsnotify
创建一个简单的文件监听程序,监控指定文件或目录的变化:
package main
import (
"fmt"
"log"
"github.com/fsnotify/fsnotify"
)
func main() {
watcher, err := fsnotify.NewWatcher()
if err != nil {
log.Fatal(err)
}
defer watcher.Close()
done := make(chan bool)
go func() {
for {
select {
case event, ok := <-watcher.Events:
if !ok {
return
}
fmt.Printf("事件: %s\n", event.Op.String())
if event.Op&fsnotify.Write == fsnotify.Write {
fmt.Println("文件被写入:", event.Name)
}
if event.Op&fsnotify.Remove == fsnotify.Remove {
fmt.Println("文件被删除:", event.Name)
}
if event.Op&fsnotify.Create == fsnotify.Create {
fmt.Println("文件被创建:", event.Name)
}
if event.Op&fsnotify.Rename == fsnotify.Rename {
fmt.Println("文件被重命名:", event.Name)
}
case err, ok := <-watcher.Errors:
if !ok {
return
}
fmt.Println("错误:", err)
}
}
}()
// 添加要监听的文件或目录
err = watcher.Add("/path/to/your/file_or_dir")
if err != nil {
log.Fatal(err)
}
fmt.Println("开始监听...")
<-done
}
在实际使用中,需要注意以下几点以提高稳定性和实用性:
立即学习“go语言免费学习笔记(深入)”;
如果想监听某个目录及其所有子目录,可以这样实现:
func addWatchAll(watcher *fsnotify.Watcher, dir string) {
filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
if err != nil {
return nil
}
if info.IsDir() {
watcher.Add(path)
}
return nil
})
}
然后在主函数中调用 addWatchAll(watcher, "/your/dir") 替代单一 Add。
基本上就这些。使用 fsnotify 可以快速实现可靠的文件监控,关键是根据实际需求处理事件类型和路径范围。以上就是如何使用Golang实现文件监控功能的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号