Heim > Backend-Entwicklung > Golang > Wie kann ich Sondertasten (wie Enter und Backspace) anhand der Standardeingabe in Go erkennen?

Wie kann ich Sondertasten (wie Enter und Backspace) anhand der Standardeingabe in Go erkennen?

Susan Sarandon
Freigeben: 2024-11-28 07:02:10
Original
844 Leute haben es durchsucht

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

Sonderschlüssel in Go von Stdin lesen

Beim Lesen von Benutzereingaben von Stdin in Go ist es oft notwendig, Sonderschlüssel wie „ „Enter“ oder „Backspace“ für bestimmte Befehle oder Bearbeitungsvorgänge. Um dies zu erreichen, untersuchen wir einen geeigneten Ansatz zur Interpretation dieser Sonderschlüssel.

Im bereitgestellten Codeausschnitt liest das Programm kontinuierlich stdin und hängt die Eingabe an einen String an. Um bestimmte Schlüssel zu erkennen, müssen wir deren entsprechende Byte-Array- oder String-Darstellung ermitteln.

Um diese Werte zu finden, können wir eine Bibliothek wie termbox-go verwenden. Es bietet eine ereignisgesteuerte Schnittstelle, die es uns ermöglicht, Tastendrücke und die zugehörigen Codes zu erfassen.

Betrachten Sie den folgenden Code mit 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)
        }
    }
}
Nach dem Login kopieren

Dieser Code richtet einen Ereignis-Listener ein Verwenden Sie termbox-go und warten Sie auf Tastendruckereignisse. Beim Drücken einer Taste prüft der Code deren Typ und Tastencode. Basierend auf dem Tastencode kann eine benutzerdefinierte Logik implementiert werden, um bestimmte Tasten wie „Enter“ oder „Rücktaste“ zu verarbeiten. Zum Beispiel:

            case term.KeyEnter:
                fmt.Println("Enter key pressed")

            case term.KeyBackspace:
                fmt.Println("Backspace key pressed")
Nach dem Login kopieren

Alternativ ist ein einfacherer Ansatz verfügbar, wenn die einzige Anforderung darin besteht, einen „Enter“-Tastendruck zu erkennen:

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")
        }
    }
}
Nach dem Login kopieren

Dieser Code verwendet den consoleReader von bufio, um a zu lesen Einzelnes Zeichen nach dem anderen, sodass der Tastendruck „Eingabe“ erkannt werden kann.

Durch die Nutzung dieser Ansätze können Entwickler Sondertasten effektiv handhaben Eingaben in Go-Programmen beim Lesen von stdin.

Das obige ist der detaillierte Inhalt vonWie kann ich Sondertasten (wie Enter und Backspace) anhand der Standardeingabe in Go erkennen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage