Maison >développement back-end >Golang >Comment diffuser des frappes sur une chaîne sans exigence de nouvelle ligne ?

Comment diffuser des frappes sur une chaîne sans exigence de nouvelle ligne ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-31 05:34:30761parcourir

How to Stream Keystrokes to a Channel without a Newline Requirement?

Diffusion de frappes de touches d'entrée sur un canal sans exigence de nouvelle ligne

Les frappes de touches saisies dans l'entrée standard (stdin) sont généralement mises en mémoire tampon, ce qui signifie qu'elles sont uniquement envoyées à un canal lorsqu'un caractère de nouvelle ligne est saisi. Cependant, dans certaines situations, il peut être souhaitable d'envoyer chaque frappe directement au canal sans attendre une nouvelle ligne.

Approche initiale et son inconvénient

Le code initial fourni dans la question, destiné à envoyer des frappes au clavier à un canal, utilisait le lecteur bufio.NewReader(os.Stdin) avec reader.ReadByte(). Cette méthode se bloque jusqu'à ce qu'un caractère de nouvelle ligne soit saisi, ne fournissant pas le résultat souhaité de transmission immédiate de la frappe.

Comprendre l'entrée tamponnée

Stdin est généralement mis en mémoire tampon de ligne par défaut. Cela signifie que l'entrée n'est pas immédiatement disponible pour le programme jusqu'à ce qu'une nouvelle ligne soit entrée. Ce comportement n'est pas unique à Go mais constitue un paramètre spécifique à la plateforme.

Solutions alternatives

  • Ncurses : Ncurses est une bibliothèque qui fournit des capacités de gestion de terminal indépendantes de la plate-forme. Il peut être utilisé pour configurer stdin pour qu'il se comporte de manière sans tampon.
  • Go-Termbox : Go-Termbox est un package léger qui permet également la gestion des entrées stdin sans tampon.
  • Programmation de bas niveau : L'écriture de liaisons C pour termios ou l'utilisation directe d'appels système Go peut permettre un contrôle manuel de la mise en mémoire tampon stdin, mais cette approche est hautement spécifique à la plate-forme et peut nécessiter des connaissances spécialisées.
  • Considérations spécifiques à la plate-forme : La gestion par Windows du stdin mis en mémoire tampon peut différer de celle des autres plates-formes. Reportez-vous au code source de ncurses ou termbox pour les implémentations spécifiques à la plate-forme.

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