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 ?

Comment créer un générateur \"tail -f\" en Go avec une approche efficace basée sur le sommeil ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-30 03:40:28293parcourir

How to Build a

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 :

  • Arrêt plus facile : Fermez simplement le fichier pour terminer l'opération.
  • Compatibilité : Le lecteur peut être intégré de manière transparente à de nombreux packages existants prenant en charge io.Reader.
  • Temps de veille réglable : le délai de mise en veille peut être optimisé en fonction des exigences de performances et de la tolérance à la latence.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn