>백엔드 개발 >Golang >조건부 확인 없이 Go `bufio.Scanner` 입력 루프를 벗어날 수 있습니까?

조건부 확인 없이 Go `bufio.Scanner` 입력 루프를 벗어날 수 있습니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-14 14:52:02537검색

Can You Escape the Go `bufio.Scanner` Input Loop Without a Conditional Check?

조건 검사 없이 입력 루프 탈출

Go에서 bufio.Scanner를 사용하면 콘솔의 입력을 한 줄씩 읽을 수 있습니다. 그러나 표준 Scan 기능은 자동으로 다음 토큰으로 진행하므로 명시적인 중단 조건이 없으면 잠재적으로 무한 루프가 발생할 수 있습니다.

문서에는 Scan이 입력 끝에 도달하면 false를 반환한다고 명시되어 있습니다. 이는 루프에서 벗어나기 위해 조건부 검사를 건너뛸 수 있다는 의미입니까?

문서의 잘못된 해석

안타깝게도 문서를 잘못 해석하셨습니다. Scanner에서 사용하는 기본 분할 기능은 각 텍스트 줄을 별도의 토큰으로 반환하는 ScanLines입니다.

ScanLines 동작

ScanLines에는 두 가지 주요 동작이 있습니다.

  1. 빈 줄 반환: 반환할 수 있음 빈 줄, 심지어 연속된 줄이라도 루프의 흐름에 영향을 주지 않습니다.
  2. 새 줄이 없는 비어 있지 않은 줄: 입력의 비어 있지 않은 마지막 줄은 그렇지 않은 경우에도 반환됩니다. 개행 문자가 없습니다.

Loop

따라서 빈 줄만으로는 입력 종료를 알리지 않습니다. 루프는 파일 끝(EOF) 조건에 도달한 경우에만 중단되며 일반적으로 Ctrl-D를 누르는 등의 작업에 의해 실행됩니다.

해결 방법

탈출하려면 if 절이 없는 입력 루프의 경우 다음 중 하나를 수행해야 합니다.

  • 검사하여 빈 줄의 경우를 수동으로 처리합니다. input.Text() == ""
  • 빈 줄이 발견되면 false를 반환하는 사용자 정의 분할 함수를 사용하세요

그러나 일반적으로 단순성을 위해 조건부 확인을 유지하는 것이 좋습니다. 잠재적인 극단적인 경우를 방지합니다.

위 내용은 조건부 확인 없이 Go `bufio.Scanner` 입력 루프를 벗어날 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.