ホームページ > バックエンド開発 > Golang > Go でファイルの変更を効率的に検出するにはどうすればよいですか?

Go でファイルの変更を効率的に検出するにはどうすればよいですか?

DDD
リリース: 2024-12-01 00:57:15
オリジナル
789 人が閲覧しました

How Can I Efficiently Detect File Changes in Go?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート