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

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(使用前将#替换为@)

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

随机推荐

  • 如何可视化 d3 力导向图布局中的节点组

    我正在寻找一种将组插入到我的力导向图形可视化中的方法 到目前为止我已经找到了三个相关的例子 Cola js这将需要添加另一个库 并可能需要改造我的代码以适应这个不同的库 这个街区 这很难解开 这张幻灯片来自 mbostock 的幻灯片 这不
  • Meteor:服务器端调试

    有谁知道调试服务器端代码的好方法 我尝试启用 Node js 调试 然后使用 node inspector 但它没有显示我的任何代码 我最终使用了 console log 但这非常低效 更新 我发现以下过程在我的 Linux 机器上有效 当
  • 从 Java 调用 python 模块

    我想使用 PythonInterpreter 从 Java 调用 python 模块中的函数 这是我的 Java 代码 PythonInterpreter interpreter new PythonInterpreter interpre
  • 默认情况下具有数学集合相等的集合类[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 HashSet不将设置相等语义用于默认相等操作 var a new HashSet
  • 用于编辑页眉和页脚的 WORD 2010 宏

    我只有基本的 VBA 经验 之前的宏经验主要是使用 WORD 2003 录制宏用于获取 GoToFooter 或编辑页脚 菜单命令并允许后续编辑 在 WORD 2010 中 此命令 以及许多其他命令 不会 记录 到宏 但在记录模式下 我确实
  • 为什么这个径向渐变没有完成圆?

    我正在尝试使用径向渐变在作为单选按钮的圆形元素内创建边框 基本的 CSS 如下所示 我不明白为什么红色渐变不围绕圆圈的整个圆周 当白色色标接近 100 时 顶部 右侧 左侧和底部会出现红色间隙 为什么会发生这种情况 以及如何在仍然使用径向渐
  • 是 C 还是 C++?

    我需要在 cpp c 源文件中使用自然对数函数 现在 我当然可以通过快速的谷歌搜索和简单的库解决方案来做到这一点 但我有点困惑 在cplusplus dot com网站的reference cmath log 下有一个如何使用日志功能的示例
  • JDialog标题的字体大小

    如何设置 JDialog 标题的字体大小 我在极高分辨率的显示器 5 兆像素 上显示 JDialog 但对话框标题不清晰 我需要在每个对话框的基础上执行此操作 因为该应用程序是多显示器的 有些对话框出现在较低分辨率的显示器上 有些对话框出现
  • .NET xsd 导入器创建不可序列化的类

    我正在使用 NETXSD EXE导入器从 XSD 文件集合生成 C 类 当我尝试将其中一个类序列化为 XML 时 它失败了 无效操作异常 当我深入研究它时 我发现创建的类之一似乎是错误的 这是相关的 XSD 代码
  • 正确使用 JPA criteria API、Predicates 和 CriteriaQuery 的 where 方法

    我正在尝试测试 JPA 存储库 这是我的客户端 测试代码 Test public void testFindBoitesByMultiFieldWithIdentifiantSet BoiteDataOnDemand dod new Boi
  • 如何在asp中每天运行cron作业网络核心应用程序?

    我有一个用 asp 编写的网络应用程序 NET MVC 核心 2 2 O 需要每天凌晨 3 00 运行计划作业 最好的方法是什么 我尝试过hangfire 它在一段时间后停止 我们需要设置IIS服务器始终运行 我google了一下 找到了
  • 如何使用 SimpleXMLElement PHP 替换 XML 节点

    我有以下 XML 字符串 1
  • 在另一个更大的数组中查找一个数组

    最近 我被要求为一项工作编写 3 个测试程序 它们将仅使用核心 Java API 和我选择的任何测试框架来编写 应在适当的情况下实施单元测试 虽然我根本没有收到任何反馈 但我想他们不喜欢我的解决方案 否则我会收到他们的来信 所以我决定在这里
  • if 语句中表达式的顺序[重复]

    这个问题在这里已经有答案了 可能的重复 bCondition NULL 和 NULL bCondition 有什么区别 Javascript 比较语句的缩小 我一直在写我的if像这样的声明 if variable1 1 if variabl
  • 必须安装/启用 PHP Fileinfo 扩展才能使用干预图像

    我在 Laravel 5 项目中使用了干预镜像包 它正在本地服务器上工作 现在 当我通过 cpanel 上传到共享服务器时 出现错误 MissingDependencyException in ImageManager php line 1
  • G++ 找不到 boost 库

    我不擅长命令行编译 我的问题是无法编译简单的项目 这取决于Boost 以下是我的尝试日志 g Wall test cpp o main tmp ccCTvBYE o In function static initialization and
  • 如何访问godaddy共享主机linux中的php.ini文件

    我有一个网络 并且在我的本地主机上运行良好 在我上传到我的 godaddy 托管后 我的网站出现了错误 结论是 我必须更改 php ini 文件上的内存限制 但在 FTP 管理器上找不到 php ini 我尝试过 找到更改 Classing
  • 根据另一个选择框中的选择填充一个选择框 - JQuery?

    我试图根据第一个选择框中所做的选择来填充一个选择框 我在网上查找过 发现了很多有关硬编码选项的有用信息 但我需要我的选项来自查询 例如 Coldfusion 中的 cfquery 我知道 cfquery 是服务器端的 所以我不能将它包含在我
  • 如何从 jUnit 测试访问 Spring @Service 对象

    情况 我有用 Service 注释的服务实现类 可以访问属性文件 Service myService public class MySystemServiceImpl implements SystemService Resource pr
  • 将标准输入击键发送到通道,无需换行

    我想在每次击键发送到标准输入后 直接将用户的击键发送到通道 我尝试了下面的代码 但这并没有给出预期的结果 因为reader ReadByte 方法会阻塞 直到输入换行符 func chars lt chan byte ch make cha