首页 > 后端开发 > Golang > Go中如何实现非阻塞字符输入?

Go中如何实现非阻塞字符输入?

DDD
发布: 2024-12-31 22:05:12
原创
969 人浏览过

How Can I Achieve Non-Blocking Character Input in Go?

Go 中的非阻塞字符输入

使用 Go 的标准库并执行操作可以实现不按 Enter 键从标准输入读取字符系统命令。

对于 Windows 用户,可以使用 syscall 包使用非规范输入模式。但是,这种方法依赖于平台,可能不适合跨平台开发。

基于 UNIX 的解决方案

提供的解决方案适用于基于 UNIX 的系统,并且禁用输入缓冲和字符回显:

package main

import (
    "fmt"
    "os"
    "os/exec"
)

func main() {
    // disable input buffering
    exec.Command("stty", "-F", "/dev/tty", "cbreak", "min", "1").Run()
    // do not display entered characters on the screen
    exec.Command("stty", "-F", "/dev/tty", "-echo").Run()

    var b []byte = make([]byte, 1)
    for {
        os.Stdin.Read(b)
        fmt.Println("I got the byte", b, "("+string(b)+")")
    }
}
登录后复制

此程序将从标准输入中重复读取字符,直到终止。 cbreak 模式禁用行缓冲,而 -echo 标志阻止输入的字符显示在屏幕上。

注意:

此解决方案假设您正在使用支持非规范输入模式的终端仿真器。如果您的终端不支持,您可能需要相应调整代码。

以上是Go中如何实现非阻塞字符输入?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板