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

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

Barbara Streisand
Barbara Streisandオリジナル
2024-12-02 22:38:10841ブラウズ

How Can I Detect File Changes in Go?

Go でのファイルの変更の検出

質問:

ファイルの変更を検出するにはどうすればよいですか? Go プログラミング言語を使用して変更しますか?特定のファイルが変更されたときに通知できる、Linux の fcntl() 機能をエミュレートする方法はありますか?

回答:

一方、fcntl() 関数はサポートされていません。 Go では利用できますが、ファイル変更を実現するために使用できるテクニックは他にもあります

クロスプラットフォームメソッド:

このメソッドには、定期的にファイルの変更をポーリングすることが含まれます:

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

この例では、watchFile 関数を使用してファイルの変更を検出し、チャネル経由でメイン ルーチンに通知する方法を示します。

注:

このクロスプラットフォームの方法はネイティブ システム コールほど効率的ではありませんが、ファイルの変更を追跡するためのシンプルでポータブルな方法を提供します。特定のユースケースではこれで十分な場合があります。

以上がGo でファイルの変更を検出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。