Maison >développement back-end >Golang >Pouvez-vous échapper à la boucle d'entrée Go `bufio.Scanner` sans vérification conditionnelle ?

Pouvez-vous échapper à la boucle d'entrée Go `bufio.Scanner` sans vérification conditionnelle ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-14 14:52:02537parcourir

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

Échapper à la boucle d'entrée sans vérification conditionnelle

Dans Go, le bufio.Scanner vous permet de lire les entrées de la console ligne par ligne. Cependant, la fonction Scan standard passe automatiquement au jeton suivant, ce qui peut entraîner une boucle infinie s'il n'y a pas de condition de rupture explicite.

La documentation indique que Scan renvoie false lorsqu'il atteint la fin de l'entrée. Cela signifie-t-il que vous pouvez ignorer la vérification conditionnelle pour sortir de la boucle ?

Mauvaise interprétation de la documentation

Malheureusement, vous avez mal interprété la documentation. La fonction de division par défaut utilisée par le scanner est ScanLines, qui renvoie chaque ligne de texte sous la forme d'un jeton distinct.

Comportement de ScanLines

ScanLines a deux comportements clés :

  1. Retours de lignes vides :Il peut renvoyer des lignes vides, même consécutives, sans affecter le flux de la boucle.
  2. Ligne non vide sans Nouvelle ligne : La dernière ligne non vide de l'entrée sera renvoyée même si elle n'a pas de caractère de nouvelle ligne.

Briser la boucle

Par conséquent, une ligne vide à elle seule ne signale pas la fin de la saisie. La boucle ne sera interrompue que lorsque vous atteindrez une condition de fin de fichier (EOF), généralement déclenchée par des actions telles que appuyer sur Ctrl-D.

Solution

Pour échapper la boucle d'entrée sans clause if, vous devez soit :

  • Gérer manuellement le cas d'une ligne vide en vérifiant input.Text() == ""
  • Utiliser une fonction split qui renvoie false lorsqu'elle rencontre une ligne vide

Cependant, il est généralement recommandé de conserver la vérification conditionnelle pour plus de simplicité et pour éviter les cas extrêmes potentiels.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn