Imaginons que souhaitiez rafraîchir la configuration de votre application ou la map des templates que vous avez en cache sans relancer l'application. Dans cet article, nous verrons comment faire. C'est-à-dire comment appeler une fonction dès qu'un fichier ou un répertoire est modifié.
Pour commencer, il faut inclure le package experimental fsnotify (développé par l'équipe golang, mais pas encore inclut dans la distribution officielle).
import "code.google.com/p/go.exp/fsnotify"
Il faut ensuite :
// fsConfigWatcher watches if the configuration file is modified and reload the // configuration dynamically is the file has been changed func fsConfigWatcher() { watcher, err := fsnotify.NewWatcher() if err != nil { logFatal("(fsConfigWatcher) fsnotify.NewWatcher() : ", err) } go func() { for { select { case ev := <-watcher.Event: logInfo("event: %v", ev) file, err := ioutil.ReadFile(CONFIGURATION_FILE) if err != nil { logFatal("(main) Configuration file : ", err) } json.Unmarshal(file, &config) case err := <-watcher.Error: logInfo("error: %v", err) } } }() err = watcher.WatchFlags("./conf/config.json", fsnotify.FSN_MODIFY) if err != nil { logFatal("(fsConfigWatcher) watcher.WatchFlags(fsnotify.FSN_MODIFY) : ", err) } }
Pour s'abonner aux modifications effectuées sur un répertoire (utile pour recharger les template mis en cache par votre application), il suffit d'indiquer un chemin vers un répertoire :
err = watcher.WatchFlags("./tmpl/", fsnotify.FSN_MODIFY)
Les autres types de modification sont les suivants :
Constante | Description |
---|---|
FSN_CREATE | Création d'un objet ou de l'objet |
FSN_MODIFY | Modification d'un objet ou de l'objet |
FSN_DELETE | Suppression d'un objet ou de l'objet |
FSN_RENAME | Changement du nom d'un objet ou de l'objet |
Une traduction du blog officiel de golang expliquant le mécanisme de la réflexion en Go. Lire »
Comment utiliser les fonctions d'encodage et de décodage du paquet encoding/json et quelques astuces complémentaires. Lire »
Préconisations officielles pour la gestion des erreurs dans un programme golang. Cet article complète les explications sur panic, defer et recover Lire »
Traduction d'une partie des spécifications officielles du langage Go, cet article explique comment développer en Go. Lire »
La bibliothèque standard de go ne gère pas les variables de session d'une application. Il existe une solution avec le toolkit Gorilla Lire »
Soyez le premier à commenter cet article
Tous les commentaires sont soumis à modération. Les balises HTML sont pour la plupart autorisées. Les liens contextuels et intéressants sont en follow.