Heim >Backend-Entwicklung >Golang >Können Sie der Go-Eingabeschleife „bufio.Scanner' ohne eine bedingte Prüfung entkommen?

Können Sie der Go-Eingabeschleife „bufio.Scanner' ohne eine bedingte Prüfung entkommen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-14 14:52:02549Durchsuche

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

Entkommen Sie der Eingabeschleife ohne Bedingungsprüfung

In Go können Sie mit dem bufio.Scanner Eingaben von der Konsole Zeile für Zeile lesen. Die standardmäßige Scan-Funktion geht jedoch automatisch zum nächsten Token über, was möglicherweise zu einer Endlosschleife führt, wenn keine explizite Unterbrechungsbedingung vorliegt.

In der Dokumentation heißt es, dass Scan „false“ zurückgibt, wenn das Ende der Eingabe erreicht wird. Bedeutet das, dass Sie die bedingte Prüfung zum Ausbrechen aus der Schleife überspringen können?

Fehlinterpretation des Dokuments

Leider haben Sie die Dokumentation falsch interpretiert. Die vom Scanner verwendete Standardaufteilungsfunktion ist ScanLines, die jede Textzeile als separates Token zurückgibt.

Verhalten von ScanLines

ScanLines hat zwei wichtige Verhaltensweisen:

  1. Leerzeilenrückgaben:Es können leere Zeilen zurückgegeben werden, sogar aufeinanderfolgende, ohne den Fluss der Schleife zu beeinträchtigen.
  2. Nichtleere Zeilen ohne Newline: Die letzte nicht leere Zeile der Eingabe wird zurückgegeben, auch wenn sie kein Newline-Zeichen hat.

Breaking the Loop

Daher signalisiert eine Leerzeile allein noch nicht das Ende der Eingabe. Die Schleife wird nur unterbrochen, wenn Sie eine Dateiende-Bedingung (EOF) erreichen, die normalerweise durch Aktionen wie das Drücken von Strg-D ausgelöst wird.

Lösung

Um zu entkommen In der Eingabeschleife ohne if-Klausel müssen Sie entweder:

  • Manuell den Fall einer leeren Zeile behandeln, indem Sie input.Text() == "" überprüfen
  • Ein benutzerdefiniertes verwenden Split-Funktion, die „false“ zurückgibt, wenn sie auf eine leere Zeile trifft

Allerdings wird allgemein empfohlen, die bedingte Prüfung der Einfachheit halber beizubehalten und potenzielle Grenzfälle zu vermeiden.

Das obige ist der detaillierte Inhalt vonKönnen Sie der Go-Eingabeschleife „bufio.Scanner' ohne eine bedingte Prüfung entkommen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn