Maison > développement back-end > Golang > Comment envoyer des frappes à un canal sans nouvelle ligne en temps réel ?

Comment envoyer des frappes à un canal sans nouvelle ligne en temps réel ?

DDD
Libérer: 2024-10-30 07:41:02
original
299 Les gens l'ont consulté

How to Send Keystrokes to a Channel Without Newline in Real Time?

Envoi de frappes à un canal sans nouvelle ligne

Un besoin courant en programmation est d'envoyer des frappes à partir de l'entrée de l'utilisateur vers un canal en temps réel. temps. Cependant, par défaut, stdin est mis en tampon de ligne, ce qui signifie qu'il nécessite un caractère de nouvelle ligne pour déclencher toute entrée.

L'extrait de code que vous avez fourni :

func chars() <-chan byte {
    ch := make(chan byte)
    reader := bufio.NewReader(os.Stdin)
    go func() {
        for {
            char, err := reader.ReadByte()
            if err != nil {
                log.Fatal(err)
            }
            ch <- char
        }
    }()
    return ch
}
Copier après la connexion

tente d'y parvenir mais échoue en raison à la nature tampon de ligne de stdin. La méthode reader.ReadByte() se bloquera jusqu'à ce qu'une nouvelle ligne soit saisie.

Une solution, comme suggérée dans la réponse, consiste à utiliser ncurses, une bibliothèque qui fournit un ensemble de fonctions pour le contrôle du terminal. Ncurses vous permet de configurer le terminal pour passer en mode non tamponné, garantissant que chaque frappe est immédiatement envoyée au canal.

Une autre solution consiste à utiliser le package go-termbox, qui fournit une API de niveau supérieur. pour travailler avec les entrées et sorties sur le terminal. Avec go-termbox, vous pouvez obtenir une entrée sans tampon en appelant SetInputMode(InputEsc) avant de lire les entrées de l'utilisateur.

Pour les implémentations spécifiques à Linux, vous pouvez explorer la bibliothèque termios ou effectuer des appels système directs à l'aide du package syscall pour configurer le comportement du terminal. Les spécificités de la gestion par chaque plate-forme des entrées tamponnées et non tamponnées doivent être étudiées dans leur documentation ou leur code source respectif.

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal