当前位置: 首页 > 面试题库 >

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

路奇
2023-03-14
问题内容

在每个单独的击键输入到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
}

感谢您对我如何使每个用户输入字符无需换行符即可立即进入频道的任何建议。


问题答案:

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

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

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

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



 类似资料:
  • 问题内容: 我最近开始弄乱Java套接字和telnet … 我希望用户能够连接到服务器,只需键入一个字母并将其发送到服务器,而无需按Enter即可发送。我确定服务器没有办法设置它,但是telnet可能有一个参数或可以允许的参数吗? 也许如果我让用户输入文字或在运行telnet之前,这行得通吗?(仅知道UNIX!) 如果我可以通过telnet来执行此操作,那么就不必为此专门编写一个特殊的客户端… 问

  • 我目前正在使用Java和jda为discord制作一个机器人。我想让机器人向特定的通道发送消息。我该怎么做?

  • 问题内容: 我得去查档案主.py以及儿童.py. 我正试图把一个字符串发送到主.py. 这是我不完整的代码: child.py I have no idea how to do this. I am running windows 10 with python 3.5.1 -谢谢 编辑:当我将参数发送回主.py,我无法重新打开 程序。操作系统重新打开在我的情况下没有用的程序。 这些程序是我尝试做的

  • 问题内容: 我正在尝试模拟输入到中的文本。我有一个1字符长的字符串,其中包含要添加的字母,然后运行: 但这似乎并没有改变任何内容。我在这里想念什么? 问题答案: 在我看来就像是虚拟键盘:-) 几乎完全相同的代码对我有用。我建议以下内容: 将目标(在您的情况下为)作为参数传递给构造函数,即: 确保目标有重点。 编辑: 为了验证以上建议,我测试了以下代码段: 这是行不通的,但是,如果对最后一行进行如下

  • 我正在为我的Discord服务器创建一个bot。 我的服务器中有一个新的用户通道。当新用户加入时,我想向这个频道发送欢迎消息。但是,我不知道如何才能访问新用户的渠道。

  • 问题内容: 我不知道如何通过JSch Shell通道发送命令。 我这样做,但是不起作用: 然后我读这样的输入: 问题答案: 如果挂起,则意味着您的“ while”永远不会结束(考虑您的代码可能不太可能),或者正在等待其“源”,即线程原因造成的阻塞。 如果没有看到调试信息,我就无法对您的代码进行故障排除。但是作为建议,您尝试过吗?这个想法是将控制台输入传递到“您的”输出,以便您可以“编写”它。为此,