Go での "tail -f" のようなジェネレーター
この記事では、Go での "tail -f" のようなジェネレーターの作成について説明します。 Go。ファイルの最後の行をリアルタイムで監視できます。最初の Go 実装には、ファイルから継続的に読み取るゴルーチンによる非同期呼び出しが含まれていました。ただし、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) を使用します。このリーダーは、bufio.Scanner や json.NewDecoder などの io.Reader を受け入れる任意のプロバイダーで使用できます。
利点:
このメソッドにはいくつかの利点があります。 goroutine アプローチより:
以上が効率的なスリープベースのアプローチを使用して Go で「tail -f」ジェネレーターを構築する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。