为了账号安全,请及时绑定邮箱和手机立即绑定

将stdin击键发送到通道而无需换行

将stdin击键发送到通道而无需换行

Go
胡说叔叔 2021-05-11 17:47:08
在每个单独的击键输入到stdin之后,我想直接将用户的击键发送到通道。我尝试了下面的代码,但这没有得到期望的结果,因为该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}感谢您提供有关如何使每个用户输入字符立即转到频道而无需换行符的建议。
查看完整描述

2 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

默认情况下,Stdin是行缓冲的。这意味着在遇到换行符之前,它不会为您提供任何输入。这不是Go特有的事情。

使它以非缓冲的方式运行是高度特定于平台的。正如Rami所建议的那样,ncurses是一种实现方法。另一个选择是更轻便的go-termbox软件包。

如果您想手动完成所有操作(至少在Linux上),则可以查看为termios编写C绑定,或直接在Go中进行系统调用。

我不知道像Windows这样的平台如何处理此问题。您可以深入研究ncurses或termbox的源代码,以了解它们的工作方式。


查看完整回答
反对 回复 2021-05-17
  • 2 回答
  • 0 关注
  • 217 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信