Heim >Backend-Entwicklung >Golang >Was verursacht den Fehler „fmt.Scanln Expected Newline' und wie kann er behoben werden?

Was verursacht den Fehler „fmt.Scanln Expected Newline' und wie kann er behoben werden?

Susan Sarandon
Susan SarandonOriginal
2024-10-24 02:07:021012Durchsuche

What Causes

fmt.Scanln Expectation

Bei der Verwendung von fmt.Scanln in Go kann der Fehler „fmt.Scanln erwartete Newline“ auftreten. Das Verständnis dieses Fehlers und seiner Auswirkungen ist entscheidend für das Debuggen und Schreiben von robustem Code.

Verhalten von fmt.Scan vs. fmt.Scanln

fmt.Scan liest durch Leerzeichen getrennte Werte aus der Standardeingabe, wobei Zeilenumbrüche als Leerzeichen behandelt werden. Dies bedeutet, dass die Eingabe so lange analysiert wird, bis entweder alle Argumente gefüllt sind oder ein Fehler auftritt. Andererseits liest fmt.Scanln auch von der Standardeingabe, erwartet jedoch ein Newline-Zeichen als Abschlusspunkt. Alle Eingaben danach werden nicht analysiert.

Beispiel

Im bereitgestellten Go-Code tritt das Problem auf, wenn fmt.Scanln zum Lesen einer Zeichenfolge s verwendet wird. Die Eingabe enthält ein Zeilenumbruchzeichen, das das Ende der Eingabe für fmt.Scanln auslöst. Allerdings sind die nachfolgenden Eingabezeichen „jeder liebt Eis“ noch vorhanden und werden vom nachfolgenden fmt.Scan verbraucht. Dies verursacht den Fehler, da fmt.Scan am Ende der Eingabe eine neue Zeile erwartet.

Alternativen

Zum Lesen einer Textzeile, die Leerzeichen enthält und mit einer neuen Zeile endet Erwägen Sie die Verwendung der ReadString-Methode von bufio.Reader:

<code class="go">import "bufio"

func main() {
    reader := bufio.NewReader(os.Stdin)
    line, err := reader.ReadString('\n')
}</code>

Fazit

Das Verständnis der unterschiedlichen Verhaltensweisen von fmt.Scan und fmt.Scanln ist wichtig, um Fehler zu vermeiden und zu schreiben Code, der den Erwartungen entspricht. Beim Lesen einer Textzeile bieten Alternativen wie bufio.Reader und ReadString explizitere und effizientere Lösungen.

Das obige ist der detaillierte Inhalt vonWas verursacht den Fehler „fmt.Scanln Expected Newline' und wie kann er behoben werden?. 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