Go で標準入力から特殊キーを読み取る
Go で標準入力からユーザー入力を読み取る場合、多くの場合、「」のような特殊キーを検出する必要があります。特定のコマンドまたは編集操作に対しては、「Enter」または「Backspace」を押します。これを実現するために、これらの特殊キーを解釈するための適切なアプローチを検討してみましょう。
提供されたコード スニペットでは、プログラムは継続的に 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 を使用して、一度に 1 文字ずつ入力することで、「Enter」キーの押下を検出できるようになります。
これらのアプローチを活用することで、開発者は次のことが可能になります。標準入力からの読み取り時に、Go プログラムでの特殊キー入力を効果的に処理します。
以上がGo の標準入力から特殊キー (Enter や Backspace など) を検出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。