将标准输入击键发送到通道,无需换行

2023-11-24

我想在每次击键发送到标准输入后,直接将用户的击键发送到通道。

我尝试了下面的代码,但这并没有给出预期的结果,因为reader.ReadByte()方法会阻塞,直到输入换行符。

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
}

感谢您提供有关如何让每个用户输入字符立即进入频道而不需要换行符的建议。


默认情况下,标准输入是行缓冲的。这意味着它不会向您产生任何输入,直到遇到换行符。这不是 Go 特有的事情。

让它以非缓冲方式运行是高度特定于平台的。正如 Rami 所建议的,ncurses 是一种实现此目的的方法。另一种选择是更轻的去术语盒包裹。

如果你想手动完成这一切(至少在 Linux 上),你可以看看为termios或者直接在 Go 中进行系统调用。

我不知道像 Windows 这样的平台如何处理这个问题。您可以深入研究 ncurses 或 termbox 的源代码,看看他们是如何做到的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将标准输入击键发送到通道,无需换行 的相关文章