Heim  >  Artikel  >  Backend-Entwicklung  >  Wie baue ich einen „tail -f“-Generator in Go mit einem effizienten schlafbasierten Ansatz?

Wie baue ich einen „tail -f“-Generator in Go mit einem effizienten schlafbasierten Ansatz?

Barbara Streisand
Barbara StreisandOriginal
2024-10-30 03:40:28293Durchsuche

How to Build a

„Tail -f“-ähnlicher Generator in Go

Dieser Artikel beschreibt die Erstellung eines „Tail -f“-ähnlichen Generators in Go, das eine Echtzeitüberwachung der letzten Zeilen einer Datei ermöglicht. Die anfängliche Go-Implementierung umfasste einen asynchronen Aufruf mit einer Goroutine, die kontinuierlich aus der Datei las. Es wird jedoch ein idiomatischerer Ansatz empfohlen, einen Wrapper um einen Reader zu verwenden, der auf EOF schläft.

Verbesserte Implementierung:

Die vorgeschlagene Verbesserung umfasst die Erstellung einer tailReader-Struktur, die implementiert die io.ReadCloser-Schnittstelle. Dieser Reader schläft, wenn ein EOF auftritt, was eine kontinuierliche Überwachung ohne kontinuierliche Abfrage ermöglicht.

<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>

Um einen tailReader zu erstellen, verwenden Sie newTailReader(fileName). Dieser Reader kann mit jedem Anbieter verwendet werden, der einen io.Reader akzeptiert, wie bufio.Scanner oder json.NewDecoder.

Vorteile:

Diese Methode bietet mehrere Vorteile über den Goroutine-Ansatz:

  • Einfacheres Herunterfahren: Schließen Sie einfach die Datei, um den Vorgang zu beenden.
  • Kompatibilität: Der Leser kann sein Nahtlose Integration in viele bestehende Pakete, die io.Reader unterstützen.
  • Anpassbare Schlafzeit: Die Schlafverzögerung kann basierend auf Leistungsanforderungen und Latenztoleranz optimiert werden.

Das obige ist der detaillierte Inhalt vonWie baue ich einen „tail -f“-Generator in Go mit einem effizienten schlafbasierten Ansatz?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn