reader.ReadString ne supprime pas le délimiteur initial
Dans le but de créer un programme qui accueille les utilisateurs nommés Alice ou Bob, un développeur a rencontré un problème où même les noms légitimes déclenchaient une réponse indésirable. Le programme a refusé à tort l'entrée à Alice et Bob.
Le problème
Le problème provient de l'utilisation de reader.ReadString('n') dans le programme. Cette fonction récupère les caractères jusqu'à ce qu'un caractère de nouvelle ligne soit rencontré. Cependant, il ne supprime pas automatiquement le délimiteur de la chaîne renvoyée, ce qui entraîne l'inclusion d'une nouvelle ligne supplémentaire dans la saisie de l'utilisateur.
Solution
Pour résoudre ce problème , il existe deux approches possibles :
1. Coupez la nouvelle ligne
Utilisez la fonction strings.TrimSpace pour supprimer tout espace de début ou de fin de la chaîne d'entrée avant de l'évaluer. Cela supprime efficacement le caractère de nouvelle ligne à l'origine du problème.
if aliceOrBob(strings.TrimSpace(text)) { fmt.Printf("Hello, ", text) }
2. Utiliser ReadLine au lieu de ReadString
Alternativement, la fonction ReadLine peut être utilisée à la place de ReadString. ReadLine récupère une ligne de texte sans inclure le caractère de nouvelle ligne dans la chaîne renvoyée.
text, _, _ := reader.ReadLine() if aliceOrBob(string(text)) { fmt.Printf("Hello, ", text) }
Explication
La raison de l'utilisation de string(text) avec ReadLine est que ReadLine renvoie une tranche d'octets, tandis qu'aliceOrBob nécessite un argument de chaîne.
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!