php 편집기 Strawberry는 이 기사에서 io.Reader 및 fmt.Fscan의 무한 루프 문제를 소개합니다. fmt.Fscan 함수를 사용하여 입력을 읽을 때 읽은 내용이 입력 형식과 일치하지 않으면 무한 루프가 발생합니다. 이 문제는 우리에게 많은 문제를 일으킬 수 있지만 몇 가지 요령과 예방 조치를 통해 이 문제를 쉽게 해결할 수 있습니다. 다음에는 이 두 기능을 더 잘 활용하는 데 도움이 되도록 io.Reader와 fmt.Fscan에서 무한 루프를 방지하는 방법을 자세히 설명하겠습니다.
이유는 모르겠지만 io.reader
구현에 뭔가 결함이 있는 것 같은데요?
io.reader
문서에는 0이 아닌 바이트 수와 0이 아닌 오류를 반환해도 괜찮다고 나와 있습니다.
그러나 이는 fmt.fscan
에서는 작동하지 않으며 대신 프로그램이 중단됩니다.
물론, io.eof
만 사용하면 0바이트 수를 반환합니다.
원래 구현에 결함이 있습니까? 아니면 io.reader
的这一特定记录行为,并且在没有更多数据可供读取时始终单独返回 0, io.eof
?
fmt.scanf
确实正确处理返回计数和 io.eof
,但即使在 io.eof
의 특정 로깅 동작에 의존하지 않고 더 이상 읽을 데이터가 없을 때 항상 0, io.eof
만 반환해야 합니까?
io.readfull
,而后者使用 io.readatleast
,因此您将需要一个更完整的实现来处理重复读取。您可以通过使用跟踪 eof 的扩展版本来测试这一点,并在第一个 read
上返回 io.eof
,它仍然可以按预期与 fmt.fscan
fmt.scanf
는 반환 횟수와
이후에도 계속 값을 반환합니다.
스캐너 구현은 io.readfull
를 사용하는
읽기
에서 를 추적하고 반환하는 확장 버전의 eof를 사용하여 이를 테스트할 수 있으며 예상대로
에서도 계속 작동합니다.
io.readatleast
문서에서 발췌한 주요 내용:
io
帮助程序需要自己解释 io.eof
,所以它们的调用者只能查找返回的实际数据,并且由于您的阅读器继续返回数据,它们将无限期地重复调用。通过在阅读器上重复调用 io.readall
...읽은 eof를 보고할 오류로 처리하지 않습니다
io
도우미는 스스로 해석해야 🎜하므로 호출자는 반환된 실제 데이터만 조회할 수 있으며 리더는 계속 데이터를 반환하므로 무기한 반복적으로 호출됩니다. 이는 리더에서 io.readall
을 반복적으로 호출하여 매번 다른 값을 반환함으로써 쉽게 설명할 수 있습니다. 🎜
으아악
🎜🎜https://www.php.cn/link/ad6fff7b7be06acff1c63ced9f0da4ea🎜🎜위 내용은 io.Reader 및 fmt.Fscan 무한 루프의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!