Maison >développement back-end >Golang >Pourquoi `reader.ReadString('\n')` ne gère-t-il pas de manière fiable les délimiteurs de nouvelle ligne dans Go ?

Pourquoi `reader.ReadString('\n')` ne gère-t-il pas de manière fiable les délimiteurs de nouvelle ligne dans Go ?

DDD
DDDoriginal
2025-01-02 17:47:42278parcourir

Why Doesn't `reader.ReadString('n')` Reliably Handle Newline Delimiters in Go?

Pourquoi reader.ReadString ne gère pas correctement les délimiteurs

Dans le programme Go fourni, le problème survient lors de l'utilisation de reader.ReadString(' n') pour lire une ligne de texte. Lorsque l'utilisateur saisit « Alice » ou « Bob », le texte saisi contient un caractère de nouvelle ligne supplémentaire, provoquant une incompatibilité avec le délimiteur spécifié ('n').

Solution : Couper ou utiliser ReadLine

Pour résoudre ce problème, vous pouvez soit couper les espaces (y compris le caractère de nouvelle ligne) après avoir lu la chaîne, soit utiliser reader.ReadLine() directement.

Découper les espaces avec des chaînes.TrimSpace

package main

import (
    "bufio"
    "fmt"
    "os"
    "strings"
)

func main() {
    reader := bufio.NewReader(os.Stdin)
    fmt.Print("Who are you? \n Enter your name: ")
    text, _ := reader.ReadString('\n')
    if aliceOrBob(strings.TrimSpace(text)) {
        fmt.Printf("Hello, ", text)
    } else {
        fmt.Printf("You're not allowed in here! Get OUT!!")
    }
}

Utiliser ReadLine

package main

import (
    "bufio"
    "fmt"
    "os"
)

func main() {
    reader := bufio.NewReader(os.Stdin)
    fmt.Print("Who are you? \n Enter your name: ")
    text, _, _ := reader.ReadLine()
    if aliceOrBob(string(text)) {
        fmt.Printf("Hello, ", text)
    } else {
        fmt.Printf("You're not allowed in here! Get OUT!!")
    }
}

En manipulant correctement le chaîne d'entrée, le programme peut désormais identifier correctement si le nom de l'utilisateur est "Alice" ou "Bob" et répondre en conséquence.

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