Maison >développement back-end >Golang >Comment puis-je détecter les touches spéciales (Entrée, Retour arrière, touches F) dans Go lors de la lecture à partir de stdin ?

Comment puis-je détecter les touches spéciales (Entrée, Retour arrière, touches F) dans Go lors de la lecture à partir de stdin ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-13 03:22:09751parcourir

How Can I Detect Special Keys (Enter, Backspace, F-keys) in Go When Reading from stdin?

Détection des clés spéciales dans Go lors de la lecture à partir de stdin

Dans Go, la lecture des entrées utilisateur à partir de stdin est une tâche courante pour de nombreuses applications. Cependant, la détection des touches spéciales, telles que Entrée, Retour arrière et F, peut s'avérer difficile. Cet article vise à fournir une explication détaillée et une solution à ce problème.

Le programme Go présenté utilise exec.Command pour définir les paramètres du terminal pour une entrée non bloquante et sans écho. Il entre ensuite dans une boucle infinie et lit un seul octet à la fois en utilisant make([]byte, 1).

Pour détecter les clés spéciales, nous devons déterminer leur représentation en octets sous-jacente. Malheureusement, l'approche naïve consistant à imprimer la valeur de l'octet ne fournira pas d'informations significatives. Au lieu de cela, nous pouvons utiliser la bibliothèque termbox-go, qui offre un moyen plus complet de gérer les événements du clavier.

Comme le démontre l'exemple de code, termbox-go fournit une fonction PollEvent qui renvoie les événements associés aux frappes au clavier. Chaque événement contient un champ Type et Clé, où Clé représente la touche enfoncée. Cela nous permet de vérifier des touches spécifiques, telles que les touches Entrée, Retour arrière et F.

L'exemple de code comprend une boucle d'écoute qui gère diverses touches, notamment les touches de fonction, les touches fléchées et les touches spéciales. comme Retour arrière et Entrée. En appuyant sur une touche, il imprime le nom de la clé correspondante ou la valeur ASCII.

Alternativement, si l'utilisation de termbox-go n'est pas réalisable, nous pouvons compter sur le package bufio pour gérer la saisie d'un seul caractère. En utilisant NewReaderSize avec une taille de tampon de 1, nous pouvons lire un seul caractère à la fois. Cette approche peut également être utilisée pour détecter Enter en vérifiant le caractère « n ».

En conclusion, la détection de touches spéciales dans Go lors de la lecture à partir de stdin nécessite une compréhension plus approfondie des paramètres du terminal et de la gestion des événements du clavier. Les solutions proposées, utilisant termbox-go ou bufio, offrent des méthodes efficaces et adaptables pour gérer cette tâche.

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