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 중국어 웹사이트의 기타 관련 기사를 참조하세요!