fsnotify 开源项目教程
fsnotifyFile system notification for Go项目地址:https://gitcode.com/gh_mirrors/fsn/fsnotify
1. 项目的目录结构及介绍
fsnotify 项目的目录结构如下:
fsnotify/
├── CHANGELOG.md
├── LICENSE
├── README.md
├── _example/
│ └── simple.go
├── bench_test.go
├── doc.go
├── event.go
├── fsnotify.go
├── fsnotify_test.go
├──inotify.go
├──inotify_poller.go
├──inotify_poller_test.go
├──inotify_test.go
├──integration_test.go
├── kqueue.go
├── kqueue_test.go
├── windows.go
├── windows_test.go
└── windows_test.c
主要文件介绍:
CHANGELOG.md
: 记录项目的更新日志。LICENSE
: 项目的许可证文件。README.md
: 项目的介绍和使用说明。_example/
: 包含一些示例代码,如simple.go
。fsnotify.go
: 项目的主文件,定义了主要的接口和结构。inotify.go
,kqueue.go
,windows.go
: 分别对应不同操作系统的文件监听实现。event.go
: 定义了事件相关的结构和方法。
2. 项目的启动文件介绍
项目的启动文件是 fsnotify.go
,其中定义了主要的接口和结构。以下是 fsnotify.go
的部分代码:
package fsnotify
import (
"fmt"
"os"
)
// Watcher watches a set of files, delivering events to a channel.
type Watcher struct {
Events chan Event
Errors chan error
}
// NewWatcher establishes a new watcher with the underlying operating system and returns it.
func NewWatcher() (*Watcher, error) {
// 省略具体实现
}
// Add starts watching the named file or directory (non-recursively).
func (w *Watcher) Add(name string) error {
// 省略具体实现
}
// Close removes all watches and closes the events channel.
func (w *Watcher) Close() error {
// 省略具体实现
}
3. 项目的配置文件介绍
fsnotify 项目本身没有传统的配置文件,它通过代码中的方法来添加监听的文件或目录。例如,在 _example/simple.go
中,可以看到如何添加监听:
package main
import (
"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
}
log.Println("event:", event)
case err, ok := <-watcher.Errors:
if !ok {
return
}
log.Println("error:", err)
}
}
}()
err = watcher.Add("/path/to/watch")
if err != nil {
log.Fatal(err)
}
<-done
}
在这个示例中,通过 watcher.Add("/path/to/watch")
方法来添加需要监听的文件或目录。
fsnotifyFile system notification for Go项目地址:https://gitcode.com/gh_mirrors/fsn/fsnotify