Maison > Article > développement back-end > Comment créer un générateur \"tail -f\" en Go avec une approche efficace basée sur le sommeil ?
Générateur de type "Tail -f" dans Go
Cet article traite de la création d'un générateur de type "tail -f" dans Go Go, qui permet de surveiller en temps réel les dernières lignes d'un fichier. L'implémentation initiale de Go impliquait un appel asynchrone avec une goroutine lisant continuellement le fichier. Cependant, une approche plus idiomatique est recommandée en utilisant un wrapper autour d'un lecteur qui dort sur EOF.
Implémentation améliorée :
L'amélioration suggérée implique la création d'une structure tailReader qui implémente l'interface io.ReadCloser. Ce lecteur se met en veille lorsqu'il rencontre un EOF, permettant une surveillance continue sans interrogation continue.
<code class="go">type tailReader struct { io.ReadCloser } func (t tailReader) Read(b []byte) (int, error) { for { n, err := t.ReadCloser.Read(b) if n > 0 { return n, nil } else if err != io.EOF { return n, err } time.Sleep(10 * time.Millisecond) } }</code>
Pour créer un tailReader, utilisez newTailReader(fileName). Ce lecteur peut être utilisé avec n'importe quel fournisseur acceptant un io.Reader, comme bufio.Scanner ou json.NewDecoder.
Avantages :
Cette méthode offre plusieurs avantages sur l'approche goroutine :
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!