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中文网其他相关文章!