Heim >Backend-Entwicklung >Golang >Scan vs. Scanln in Go: Das erwartete Newline-Verhalten verstehen

Scan vs. Scanln in Go: Das erwartete Newline-Verhalten verstehen

Barbara Streisand
Barbara StreisandOriginal
2024-10-24 02:54:02370Durchsuche

Scan vs. Scanln in Go: Understanding the Expected Newline Behavior

fmt.Scanln erwarteter Newline-Fehler: Das Verhalten verstehen

Die fmt.Scanln-Funktion in Go löst einen Fehler aus, wenn danach ein fehlender Newline-Fehler auftritt Lesen einer Eingabezeile. Dieses Verhalten ist im Gegensatz zur getline-Methode in C beabsichtigt und wird durch die spezifische Implementierung von fmt.Scanln gesteuert.

Scan vs. Scanln

fmt.Scan liest Eingaben durch Leerzeichen getrennte Werte und speichert sie in den angegebenen Argumenten. Zeilenumbrüche werden als Leerzeichen behandelt. Im Gegensatz dazu stoppt fmt.Scanln das Scannen bei einer neuen Zeile, und nach dem letzten gescannten Element muss eine neue Zeile stehen. Dieser Unterschied ergibt sich aus der beabsichtigten Verwendung:

  • fmt.Scan wird zum Scannen mehrerer einzelner, durch Leerzeichen getrennter Werte in einer einzelnen Zeile verwendet.
  • fmt.Scanln ist zum Scannen eines vollständigen Wertes konzipiert Eingabezeile, einschließlich aller Leerzeichen und der neuen Zeile.

Der Fehler

Bei Verwendung von fmt.Scanln ohne eine neue Zeile nach der Eingabe tritt ein Fehler auf ausgelöst, weil die Funktion einen Zeilenumbruch erwartet, um die Zeile zu beenden. Die Fehlermeldung „Scan: erwartete neue Zeile“ weist auf diesen Zustand hin.

Vergleich mit getline in C

Die getline-Methode in C liest eine Eingabezeile und speichert sie es in einer bereitgestellten String-Variablen. Im Gegensatz zu fmt.Scanln erfordert getline keinen Zeilenumbruch am Ende der Eingabe. Dieser Unterschied ist auf die Tatsache zurückzuführen, dass getline normalerweise zum Lesen ganzer Zeilen verwendet wird, während fmt.Scanln zum Scannen bestimmter Werte innerhalb einer Zeile konzipiert ist.

Alternative zum Zeilenlesen

Wenn Sie eine komplette Eingabezeile in Go lesen müssen, können Sie die ReadString-Methode des bufio.Reader-Typs verwenden:

<code class="go">line, err := buffer.ReadString('\n')</code>

Diese Methode liest die Eingabe, bis ein Zeilenumbruchzeichen gefunden wird, und speichert sie die Zeile in der Zeilenvariablen.

Wenn Sie das Verhalten von fmt.Scanln und seinen Unterschied zur getline-Methode von C verstehen, können Sie diese Funktionen effektiv für die Eingabeanalyse in Ihren Go-Programmen verwenden.

Das obige ist der detaillierte Inhalt vonScan vs. Scanln in Go: Das erwartete Newline-Verhalten verstehen. 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