Maison > développement back-end > Golang > Comment puis-je détecter les touches spéciales (comme Entrée et Retour arrière) à partir de la saisie standard dans Go ?

Comment puis-je détecter les touches spéciales (comme Entrée et Retour arrière) à partir de la saisie standard dans Go ?

Susan Sarandon
Libérer: 2024-11-28 07:02:10
original
873 Les gens l'ont consulté

How Can I Detect Special Keys (Like Enter and Backspace) from Standard Input in Go?

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

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

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

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal