Maison >développement back-end >Golang >Comment puis-je détecter si STDIN contient des données dans Go ?

Comment puis-je détecter si STDIN contient des données dans Go ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-10 12:32:15215parcourir

How Can I Detect if STDIN Contains Data in Go?

Vérification de l'entrée sur STDIN dans Go

Cet extrait de code résout le problème de la vérification de l'entrée sur l'entrée standard (STDIN) à l'aide du langage Go. En particulier, l'utilisateur rencontre une situation dans laquelle son utilitaire de ligne de commande doit se comporter différemment en fonction de la présence d'une chaîne redirigée vers STDIN.

L'exemple de code fourni utilise ioutil.ReadAll(os.Stdin) fonction pour lire tous les octets de STDIN. Si la longueur du tableau d'octets est supérieure à zéro, le code imprime un message approprié indiquant que quelque chose est disponible sur STDIN. Cependant, lorsqu'il n'y a rien sur STDIN, le code peut rester bloqué en attendant un marqueur de fin de fichier (EOF).

Pour résoudre ce problème, le code exploite l'indicateur os.ModeCharDevice pour déterminer si STDIN provient d'un terminal ou d'un tuyau. Si l'indicateur os.ModeCharDevice n'est pas défini, cela indique que les données sont acheminées vers STDIN et le code imprime un message en conséquence. Sinon, il suppose que STDIN provient d'un terminal.

Voici l'extrait de code modifié intégrant la vérification os.ModeCharDevice :

stat, _ := os.Stdin.Stat()
if (stat.Mode() & os.ModeCharDevice) == 0 {
    fmt.Println("data is being piped to stdin")
} else {
    fmt.Println("stdin is from a terminal")
}

Ce code permet effectivement à l'utilitaire de ligne de commande de distinguer entre l'entrée canalisée et l'entrée directe du terminal, lui permettant de se comporter 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