首页  >  文章  >  后端开发  >  在 Go 中如何在没有换行符的情况下直接将击键读取到通道中?

在 Go 中如何在没有换行符的情况下直接将击键读取到通道中?

DDD
DDD原创
2024-10-30 07:44:02745浏览

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 特有的,而是平台范围内的默认值。对于非缓冲输入,需要特定于平台的解决方案。一种选择是使用 ncurses 或 go-termbox 软件包。或者,您可以使用 termios 或 Go 系统调用(适用于 Linux)实现手动输入处理。 Windows 实现需要探索 ncurses 或 termbox 源代码。

以上是在 Go 中如何在没有换行符的情况下直接将击键读取到通道中?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn