„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:
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!