ホームページ >バックエンド開発 >Golang >Go の標準入力から特殊キー (Enter や Backspace など) を検出するにはどうすればよいですか?

Go の標準入力から特殊キー (Enter や Backspace など) を検出するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-28 07:02:10849ブラウズ

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

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。