Saisie de caractères non bloquante dans Go
La lecture d'un caractère à partir d'une entrée standard sans appuyer sur Entrée peut être obtenue en utilisant la bibliothèque standard de Go et en exécutant l'opération commandes système.
Pour les utilisateurs de Windows, un mode de saisie non canonique peut être disponible à l'aide du package syscall. Cependant, cette approche dépend de la plate-forme et peut ne pas convenir au développement multiplateforme.
Solution basée sur UNIX
La solution fournie fonctionne pour les systèmes basés sur UNIX et désactive la mise en mémoire tampon d'entrée et l'écho des caractères :
package main import ( "fmt" "os" "os/exec" ) func main() { // disable input buffering exec.Command("stty", "-F", "/dev/tty", "cbreak", "min", "1").Run() // do not display entered characters on the screen exec.Command("stty", "-F", "/dev/tty", "-echo").Run() var b []byte = make([]byte, 1) for { os.Stdin.Read(b) fmt.Println("I got the byte", b, "("+string(b)+")") } }
Ce programme lira à plusieurs reprises un caractère de l'entrée standard jusqu'à ce qu'il soit terminé. Le mode cbreak désactive la mise en mémoire tampon de ligne, tandis que l'indicateur -echo empêche le caractère saisi d'être affiché à l'écran.
Remarque :
Cette solution suppose que vous utilisez un émulateur de terminal qui prend en charge le mode d'entrée non canonique. Si votre terminal ne le prend pas en charge, vous devrez peut-être ajuster le code en conséquence.
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!