Maison >développement back-end >Golang >Pourquoi fmt.Scanln de Go génère-t-il une erreur « Nouvelle ligne attendue » ?
Erreur fmt.Scanln : nouvelle ligne attendue
Lors de l'utilisation de la fonction fmt.Scanln dans Go, vous pouvez rencontrer une erreur de « nouvelle ligne attendue » . Cela se produit lorsque l'entrée contient un caractère de nouvelle ligne avant le délimiteur attendu (généralement un espace). Pour résoudre ce problème, examinons le comportement de fmt.Scan et fmt.Scanln.
fmt.Scan lit les valeurs séparées par des espaces à partir de l'entrée standard, en traitant les nouvelles lignes comme des espaces. Il attribue ces valeurs aux arguments correspondants, renvoyant le nombre d'éléments analysés avec succès.
fmt.Scanln se comporte de la même manière mais arrête l'analyse à une nouvelle ligne. Il est essentiel que l'entrée se termine par une nouvelle ligne ou un EOF pour se terminer avec succès.
Pour illustrer cela, considérons l'entrée suivante :
123 123.456 everybody loves ice cream
Lors de l'utilisation de fmt.Scan, la sortie sera :
read 1 integer: 123 read 1 float64: 123.456 read 1 string: everybody Error: Scan: expected newline
fmt.Scan interprète "tout le monde aime la glace" comme deux chaînes, ce qui entraîne l'erreur.
Cependant, si vous utilisez fmt.Scanln pour la même entrée, la sortie sera :
read 1 integer: 123 read 1 float64: 123.456 read 1 string: everybody loves ice cream
fmt.Scanln reconnaît la nouvelle ligne comme délimiteur et analyse correctement la ligne entière comme un argument de chaîne unique.
Pour lire une ligne qui se termine par un caractère de nouvelle ligne dans Allez, vous pouvez utiliser bufio.Reader et sa méthode ReadString :
line, err := buffer.ReadString('\n')
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!