Recursion Golang File/Directory Walker多次添加文件

Recursion Golang File/Directory Walker多次添加文件,recursion,go,filesystemwatcher,Recursion,Go,Filesystemwatcher,因此,我使用filepath.Walk函数递归地监视文件中的更改fsnotify无法执行开箱即用的递归操作。我设置了一个Goroutine来监视更改,然后在Walk()函数中将路径添加到观察者 func (w Watch) walkDirectories(fp string) { error := filepath.Walk(fp, func(path string, info os.FileInfo, err error) error { // skip files

因此,我使用
filepath.Walk
函数递归地监视文件中的更改
fsnotify
无法执行开箱即用的递归操作。我设置了一个Goroutine来监视更改,然后在
Walk()
函数中将路径添加到观察者

func (w Watch) walkDirectories(fp string) {
    error := filepath.Walk(fp, func(path string, info os.FileInfo, err error) error {
        // skip files
        if info == nil {
            log.Fatalf("wrong watcher package: %s", path)
        }
        if !info.IsDir() {
            return nil
        }
        if len(path) > 1 && strings.HasPrefix(filepath.Base(path), ".") {
            return filepath.SkipDir
        }
        log.Println("filepath: ", filepath)
        w.W.Add(path)
        return err
    })
    log.Println("error: ", error)
}
我有一个自定义的结构来容纳一个观察者,这样我就可以很容易地为它添加路径来观察。您可以在此处看到它的使用:
w.w.Add(path)
。这一切都很好,除了顶层目录中的文件似乎被添加到观察者中两次,或者至少我的假设是“它们的目录级别低于顶层的次数相同”。我的目录结构是这样的:

.
├── README.md
├── languages.go
├── languages.json
├── librarymonitor.go
├── telemetryClient
└── testfiles
    ├── test.go
    ├── test.c
    ├── test.java
如果我更改testfiles目录中的一个文件,我会从观察者那里得到一个“通知”。如果我在根目录中更改一个文件,我会得到两个。有人能解释一下吗?

谢谢

检查您的主代码,这很好用,(试试):

主程序包
进口(
“fmt”
“操作系统”
“路径/文件路径”
“反映”
“时间”
)
func main(){
rootDir:=”
图案:=“*”
dirs,err:=GetDirectories(rootDir,pattern)
如果错误!=零{
恐慌(错误)
}
股票代码:=time.NewTicker(1*time.Second)
对于i:=1;i<10;i++{

无法在我的机器上复制行为。在我看来,交易可能是输入错误或您未提供的w.w.Add(路径)。如果没有w.w.Add(路径),您的代码输出将在我的机器上正确。
Dir Changed:  16 17
Done