ホームページ  >  記事  >  バックエンド開発  >  Go で改行を使用せずにキーストロークをチャネルに直接読み取るにはどうすればよいですか?

Go で改行を使用せずにキーストロークをチャネルに直接読み取るにはどうすればよいですか?

DDD
DDDオリジナル
2024-10-30 07:44:02741ブラウズ

How Can I Read Keystrokes Directly into a Channel Without a Newline in Go?

改行なしでチャネルに直接キーストロークを入力

Go では、標準入力 (stdin) はデフォルトでラインバッファリングされます。これは、キーストロークがすぐにチャネルに送信されないことを意味します。代わりに、改行文字が入力されるまで保持されます。この制限を克服するために、改行を必要とせずにキーストロークを読み取り、チャネルに送信する方法を次に示します。

<code class="go">func chars() <-chan byte {
    ch := make(chan byte)
    reader := bufio.NewReader(os.Stdin)
    go func() {
        for {
            char, err := reader.ReadByte()
            if err != nil {
                log.Fatal(err)
            }
            ch <- char
        }
    }()
    return ch
}</code>

ただし、stdin 行バッファリングは Go に固有のものではなく、プラットフォーム全体のデフォルトです。 。非バッファー入力の場合は、プラットフォーム固有のソリューションが必要です。 1 つのオプションは、ncurses または go-termbox パッケージを使用することです。あるいは、termios または Go システムコール (Linux の場合) を使用して手動入力処理を実装することもできます。 Windows の実装には、ncurses または termbox のソース コードを調べる必要があります。

以上がGo で改行を使用せずにキーストロークをチャネルに直接読み取るにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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