Verrouillage d'un fichier exclusivement dans Go
Question : Comment puis-je obtenir un accès exclusif en lecture à un fichier dans Go , empêchant d'autres processus d'y accéder tant qu'il reste ouvert ?
Réponse :
Solution multiplateforme utilisant fslock
Pour obtenir un accès exclusif aux fichiers dans Go, nous pouvons utilisez le package fslock de GitHub : https://github.com/juju/fslock. Ce package fournit un mécanisme de verrouillage multiplateforme basé sur les verrous de fichiers.
Étapes :
Créer un objet de verrouillage :
Initialiser un objet Lock pour la cible fichier :
lock := fslock.New("file.txt")
Verrouillez le fichier :
Pour obtenir le verrou, utilisez la méthode Lock() :
lockErr := lock.Lock()
Gérer les erreurs :
Si le verrou ne peut pas être acquis, gérez le erreur :
if lockErr != nil { log.Fatal(lockErr) }
Libérez le verrou :
Une fois l'opération sur le fichier terminée, libérez le verrou :
lock.Unlock()
Option de délai d'attente :
Si le verrouillage immédiat n'est pas critique, utilisez l'option Méthode LockWithTimeout() pour spécifier une durée d'expiration :
lockErr := lock.LockWithTimeout(30 * time.Second)
Exemple d'implémentation :
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() }
En utilisant fslock, vous pouvez contrôler efficacement accès à un fichier dans Go, garantissant des opérations de lecture exclusives et refusant l'accès en écriture à tout autre processus jusqu'à ce que le verrou soit libéré.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!