從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中文網其他相關文章!