Go 中類似「Tail -f」的產生器
本文討論了在Go 中建立類似「tail -f」的生成器Go,它允許即時監控檔案的最後幾行。最初的 Go 實作涉及一個非同步調用,其中一個 goroutine 不斷從檔案中讀取。然而,建議使用更慣用的方法,在 EOF 上睡眠的讀取器周圍使用包裝器。
改進的實作:
建議的改進涉及建立一個 tailReader 結構來實現io.ReadCloser 介面。該讀取器在遇到 EOF 時會休眠,從而允許連續監視而無需連續輪詢。
<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>
要建立 tailReader,請使用 newTailReader(fileName)。此閱讀器可與任何接受 io.Reader 的提供者一起使用,例如 bufio.Scanner 或 json.NewDecoder。
優點:
此方法有幾個優點透過goroutine 方法:
以上是如何使用基於睡眠的高效方法在 Go 中建立'tail -f”生成器?的詳細內容。更多資訊請關注PHP中文網其他相關文章!