我希望我的应用程序显示:
press any key to exit ...
当我按下任意键时退出。
我该如何实现这个功能?
注意:我已经搜索过了,但是所有我找到的方法都需要在结尾按下Enter键。我想要类似于C#中的Console.ReadKey()
的功能。
我正在运行MS Windows操作系统。
我希望我的应用程序显示:
press any key to exit ...
当我按下任意键时退出。
我该如何实现这个功能?
注意:我已经搜索过了,但是所有我找到的方法都需要在结尾按下Enter键。我想要类似于C#中的Console.ReadKey()
的功能。
我正在运行MS Windows操作系统。
这是一个针对运行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)+")")
}
}
fmt.Print(string(b))
应该可以工作。 - blinryexec.Command("stty", "-F", "/dev/tty", "echo").Run()
命令将它们恢复。 - Joseph Van Riper包"golang.org/x/term"允许您将标准输入(stdin)切换到原始模式(raw mode),以逐个字节地读取。
package main
import (
"fmt"
"os"
"golang.org/x/term"
)
func main() {
// switch stdin into 'raw' mode
oldState, err := term.MakeRaw(int(os.Stdin.Fd()))
if err != nil {
fmt.Println(err)
return
}
defer term.Restore(int(os.Stdin.Fd()), oldState)
b := make([]byte, 1)
_, err = os.Stdin.Read(b)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("the char %q was hit", string(b[0]))
}
char, _, err := keyboard.GetSingleKey()
if (err != nil) {
panic(err)
}
fmt.Printf("You pressed: %q\r\n", char)
go-termbox非常笨重。 它想要接管整个终端窗口。 例如,它在启动时清除屏幕,这可能不是您想要的。
我在OSX上编写了一个小的getchar():
https://github.com/paulrademacher/climenu/blob/master/getchar.go
请尝试这个 - http://play.golang.org/p/kg-QirlucY。
只需在func main
结束时从os.Stdin
读取即可。
SetConsoleMode
。如果想要显示 "按 Enter 继续",那么 os.Stdin.Read([]byte{0})
就足够了。 - kbridge4096