Go でのファイル変更検出
ファイルの変更の検出は、ファイル編集、バージョン管理、データ整合性監視などのさまざまなアプリケーションにとって重要です。 。 Go の標準ライブラリは、ファイル変更通知用の Unix の fcntl() 関数と直接同等のものを提供しません。ただし、このタスクを達成するための別のアプローチもあります。
クロスプラットフォーム ソリューションの 1 つは、os.Stat() 関数を使用して、ファイルの現在のサイズと変更時刻を最初に取得した初期状態と比較することです。監視プロセスの。不一致が見つかった場合、ファイルは変更されたとみなされます。このアプローチのサンプル実装:
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
このアプローチはシンプルさとクロスプラットフォーム互換性を提供しますが、そうではない可能性があります。ファイルが頻繁に変更されるシナリオにとって最も効率的なソリューションです。より高いパフォーマンスを必要とするアプリケーションの場合は、システム コールまたはファイル ウォッチャーを使用したプラットフォーム固有のソリューションを検討する価値があるかもしれません。
以上がGo でファイルの変更を効率的に検出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。