Lecture des clés spéciales dans Go depuis Stdin
Lors de la lecture des entrées utilisateur depuis stdin dans Go, il est souvent nécessaire de détecter des clés spéciales telles que " enter" ou "backspace" pour des commandes ou des opérations d'édition spécifiques. Pour y parvenir, explorons une approche appropriée pour interpréter ces clés spéciales.
Dans l'extrait de code fourni, le programme lit en continu stdin et ajoute l'entrée à une chaîne. Pour détecter des clés spécifiques, nous devons déterminer leur tableau d'octets ou leur représentation sous forme de chaîne correspondante.
Pour trouver ces valeurs, nous pouvons utiliser une bibliothèque comme termbox-go. Il fournit une interface basée sur les événements qui nous permet de capturer les pressions sur les touches et leurs codes associés.
Considérez le code suivant en utilisant termbox-go :
package main import ( "fmt" term "github.com/nsf/termbox-go" ) func main() { err := term.Init() if err != nil { panic(err) } defer term.Close() fmt.Println("Press any key to see their ASCII code or press ESC button to quit") keyPressListenerLoop: for { switch ev := term.PollEvent(); ev.Type { case term.EventKey: switch ev.Key { case term.KeyEsc: break keyPressListenerLoop case term.KeyEnter: // Handle enter key press case term.KeyBackspace: // Handle backspace key press // Add other special keys here } case term.EventError: panic(ev.Err) } } }
Ce code configure un écouteur d'événement. en utilisant termbox-go et attend les événements de presse clés. Lorsqu'une touche est enfoncée, le code vérifie son type et son code clé. Sur la base du code clé, une logique personnalisée peut être implémentée pour gérer des touches spécifiques telles que « entrée » ou « retour arrière ». Par exemple :
case term.KeyEnter: fmt.Println("Enter key pressed") case term.KeyBackspace: fmt.Println("Backspace key pressed")
Alternativement, une approche plus simple est disponible si la seule exigence est de détecter une pression sur la touche « entrée » :
package main import ( "fmt" "os" "bufio" ) func main() { fmt.Println("Press ESC button or Ctrl-C to exit this program") fmt.Println("Press Enter to continue") for { consoleReader := bufio.NewReaderSize(os.Stdin, 1) fmt.Print("> ") input, _ := consoleReader.ReadByte() ascii := input // ESC = 27 and Ctrl-C = 3 if ascii == 27 || ascii == 3 { fmt.Println("Exiting...") os.Exit(0) } if ascii == 10 { // Enter key has ASCII value 10 fmt.Println("Enter key pressed") } } }
Ce code utilise le consoleReader de bufio pour lire un un seul caractère à la fois, lui permettant de détecter la pression sur la touche « Entrée ».
En tirant parti de ces approches, les développeurs peuvent gérer efficacement les touches spéciales entrées dans les programmes Go lors de la lecture à partir de stdin.
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!