Pengesanan Perubahan Fail dalam Go
Mengesan perubahan fail adalah penting untuk pelbagai aplikasi, seperti penyuntingan fail, kawalan versi dan pemantauan integriti data . Dalam Go, perpustakaan standard tidak menyediakan setara langsung dengan fungsi fcntl() Unix untuk pemberitahuan perubahan fail. Walau bagaimanapun, terdapat pendekatan alternatif untuk menyelesaikan tugas ini.
Satu penyelesaian merentas platform melibatkan penggunaan fungsi os.Stat() untuk membandingkan saiz semasa dan masa pengubahsuaian fail dengan keadaan awal yang diperoleh pada permulaan daripada proses pemantauan. Jika terdapat sebarang percanggahan, fail tersebut dianggap telah berubah. Contoh pelaksanaan pendekatan ini:
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 }
Fungsi ini boleh digunakan dengan cara berikut:
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
Walaupun pendekatan ini menawarkan kesederhanaan dan keserasian merentas platform, ia mungkin tidak penyelesaian yang paling cekap untuk senario di mana perubahan fail adalah kerap. Untuk aplikasi yang memerlukan prestasi lebih tinggi, penyelesaian khusus platform menggunakan panggilan sistem atau pemerhati fail mungkin berbaloi untuk diterokai.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengesan Perubahan Fail dengan Cekap dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!