首頁 >後端開發 >Golang >如何從 Go 的標準輸入中偵測特殊按鍵(例如 Enter 和 Backspace)?

如何從 Go 的標準輸入中偵測特殊按鍵(例如 Enter 和 Backspace)?

Susan Sarandon
Susan Sarandon原創
2024-11-28 07:02:10787瀏覽

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

從Stdin 讀取Go 中的特殊鍵

在Go 中從stdin 讀取使用者輸入時,通常需要偵測特殊鍵,例如“輸入”或“退格”以執行特定命令或編輯操作。為了實現這一目標,讓我們探索一種合適的方法來解釋這些特殊鍵。

在提供的程式碼片段中,程式不斷讀取 stdin 並將輸入附加到字串中。為了偵測特定的鍵,我們需要確定它們對應的位元組數組或字串表示形式。

為了找出這些數值,我們可以利用像 termbox-go 這樣的函式庫。它提供了一個事件驅動的接口,允許我們捕獲按鍵及其相關代碼。

使用 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)
        }
    }
}

此程式碼設定一個事件偵聽器使用 termbox-go 並等待按鍵事件。當按下某個鍵時,代碼會檢查其類型和鍵代碼。基於按鍵程式碼,可以實作自訂邏輯來處理特定按鍵,例如「enter」或「backspace」。例如:

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

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

或者,如果唯一的要求是檢測「enter」按鍵,則可以使用更簡單的方法:

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

此程式碼使用bufio 的consoleReader 來讀取一次單一字符,使其能夠檢測“enter”鍵按下。

透過利用這些方法,開發人員可以有效地處理特殊鍵從 stdin 讀取時在 Go 程式中的輸入。

以上是如何從 Go 的標準輸入中偵測特殊按鍵(例如 Enter 和 Backspace)?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn