Go でファイルを排他的にロックする
質問: Go でファイルへの排他的読み取りアクセスを取得するにはどうすればよいですか? 、それが残っている間、他のプロセスがそれにアクセスするのを防ぎますopen?
答え:
fslock を使用したクロスプラットフォーム ソリューション
Go で排他的なファイル アクセスを実現するには、次のことができます。 GitHub: https://github.com/juju/fslock の fslock パッケージを利用します。このパッケージは、ファイル ロックに基づいたクロスプラットフォーム ロック メカニズムを提供します。
手順:
ロック オブジェクトの作成:
ターゲットの Lock オブジェクトを初期化しますファイル:
lock := fslock.New("file.txt")
ファイルをロックする:
ロックを取得するには、Lock() メソッドを使用します:
lockErr := lock.Lock()
ハンドルエラー:
ロックを取得できない場合は、エラーを処理します:
if lockErr != nil { log.Fatal(lockErr) }
ロックを解放します:
ファイルを一度操作が完了したら、ボタンを放しますlock:
lock.Unlock()
タイムアウト オプション:
即時ロックが重要ではない場合は、LockWithTimeout() メソッドを使用してタイムアウト期間を指定します:
lockErr := lock.LockWithTimeout(30 * time.Second)
例実装:
package main import ( "fmt" "github.com/juju/fslock" "time" ) func main() { lock := fslock.New("lock.txt") lockErr := lock.TryLock() if lockErr != nil { fmt.Println("failed to acquire lock >", lockErr.Error()) return } fmt.Println("got the lock") time.Sleep(1 * time.Minute) // release the lock lock.Unlock() }
fslock を使用すると、Go でファイルへのアクセスを効果的に制御でき、排他的な読み取り操作を保証し、ロックが解放されるまで他のプロセスへの書き込みアクセスを拒否できます。
以上がGo で排他的なファイル アクセスを実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。