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中文网其他相关文章!