Heim >Backend-Entwicklung >Golang >Was verursacht den Fehler „fmt.Scanln Expected Newline' und wie kann er behoben werden?
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!