Maison  >  Article  >  développement back-end  >  Comment puis-je lire les frappes directement dans un canal sans nouvelle ligne dans Go ?

Comment puis-je lire les frappes directement dans un canal sans nouvelle ligne dans Go ?

DDD
DDDoriginal
2024-10-30 07:44:02745parcourir

How Can I Read Keystrokes Directly into a Channel Without a Newline in Go?

Saisissez les frappes directement sur le canal sans nouvelle ligne

Dans Go, l'entrée standard (stdin) est mise en mémoire tampon de ligne par défaut. Cela implique que les frappes au clavier ne sont pas immédiatement envoyées à un canal ; au lieu de cela, ils sont conservés jusqu'à ce qu'un caractère de nouvelle ligne soit saisi. Pour surmonter cette limitation, voici comment lire les frappes au clavier et les envoyer à un canal sans avoir besoin d'une nouvelle ligne :

<code class="go">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
}</code>

Cependant, la mise en mémoire tampon des lignes stdin n'est pas spécifique à Go mais plutôt une valeur par défaut à l'échelle de la plate-forme. . Pour les entrées sans tampon, des solutions spécifiques à la plate-forme sont requises. Une option consiste à utiliser les packages ncurses ou go-termbox. Alternativement, vous pouvez implémenter la gestion manuelle des entrées avec termios ou les appels système Go (pour Linux). La mise en œuvre de Windows nécessite l'exploration du code source de ncurses ou de termbox.

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