首页 >后端开发 >Golang >如何使用状态轮询检测 Go 中的文件更改?

如何使用状态轮询检测 Go 中的文件更改?

DDD
DDD原创
2024-12-02 21:31:16735浏览

How Can I Detect File Changes in Go Using Status Polling?

使用状态轮询检测 Go 中的文件更改

在 Go 中,您可以使用状态轮询检测文件何时发生更改。虽然 Go 没有提供与 Unix fcntl() 函数直接等效的文件更改通知,但状态轮询提供了跨平台解决方案:

func watchFile(filePath string) error {
    initialStat, err := os.Stat(filePath)
    if err != nil {
        return err
    }

    for {
        stat, err := os.Stat(filePath)
        if err != nil {
            return err
        }

        if stat.Size() != initialStat.Size() || stat.ModTime() != initialStat.ModTime() {
            break
        }

        time.Sleep(1 * time.Second)
    }

    return nil
}

用法:

doneChan := make(chan bool)

go func(doneChan chan bool) {
    defer func() {
        doneChan <- true
    }()

    err := watchFile("/path/to/file")
    if err != nil {
        fmt.Println(err)
    }

    fmt.Println("File has been changed")
}(doneChan)

<-doneChan

This解决方案不提供系统调用的效率,但提供了一种适用于所有平台的简单方法,并且可能足以满足各种用例。

以上是如何使用状态轮询检测 Go 中的文件更改?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn