使用状态轮询检测 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中文网其他相关文章!