Maison > développement back-end > Golang > Comment puis-je obtenir une saisie de caractères non bloquante dans Go ?

Comment puis-je obtenir une saisie de caractères non bloquante dans Go ?

DDD
Libérer: 2024-12-31 22:05:12
original
968 Les gens l'ont consulté

How Can I Achieve Non-Blocking Character Input in Go?

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)+")")
    }
}
Copier après la connexion

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!

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