Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Mengesan Kunci Khas (Seperti Enter dan Backspace) daripada Input Standard dalam Go?

Bagaimanakah Saya Boleh Mengesan Kunci Khas (Seperti Enter dan Backspace) daripada Input Standard dalam Go?

Susan Sarandon
Susan Sarandonasal
2024-11-28 07:02:10776semak imbas

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

Membaca Kekunci Khas dalam Go daripada Stdin

Apabila membaca input pengguna daripada stdin dalam Go, selalunya perlu untuk mengesan kunci khas seperti " masukkan" atau "ruang belakang" untuk arahan atau operasi penyuntingan tertentu. Untuk mencapai matlamat ini, mari kita teroka pendekatan yang sesuai untuk mentafsir kunci khas ini.

Dalam coretan kod yang disediakan, atur cara membaca stdin secara berterusan dan menambahkan input pada rentetan. Untuk mengesan kunci tertentu, kita perlu menentukan tatasusunan bait atau perwakilan rentetan yang sepadan.

Untuk mencari nilai ini, kita boleh menggunakan perpustakaan seperti termbox-go. Ia menyediakan antara muka dipacu peristiwa yang membolehkan kami menangkap penekanan kekunci dan kod yang berkaitan dengannya.

Pertimbangkan kod berikut menggunakan 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)
        }
    }
}

Kod ini menyediakan pendengar acara menggunakan termbox-go dan menunggu acara akhbar utama. Apabila kekunci ditekan, kod itu menyemak jenis dan kod kekuncinya. Berdasarkan kod kunci, logik tersuai boleh dilaksanakan untuk mengendalikan kunci tertentu seperti "masuk" atau "ruang belakang." Contohnya:

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

            case term.KeyBackspace:
                fmt.Println("Backspace key pressed")

Sebagai alternatif, pendekatan yang lebih mudah tersedia jika satu-satunya keperluan adalah untuk mengesan tekan kekunci "masuk":

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")
        }
    }
}

Kod ini menggunakan consoleReader bufio untuk membaca a aksara tunggal pada satu-satu masa, membolehkan ia mengesan tekan kekunci "masuk".

Dengan memanfaatkan pendekatan ini, pembangun boleh mengendalikan input utama khas dalam program Go dengan berkesan apabila membaca daripada stdin.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengesan Kunci Khas (Seperti Enter dan Backspace) daripada Input Standard dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn