我在Go中有一个REPL应用,该应用应该对键盘按下事件(每个按下的按键的动作有所不同)做出反应,但是ReadString希望在阅读之前按下返回键os.Stdin:
ReadString
os.Stdin
import ( "bufio" "os" ) for { reader := bufio.NewReader(os.Stdin) key, _ := reader.ReadString('\n') deferKey(key) }
我如何对Go中的按键事件做出反应?
游戏引擎通常实现这种功能。它们通常也与平台无关(通常至少是Windows,Linux,Mac OS X)。例如尝试Azul3D的键盘库。
逻辑就像我的头上一样
watcher := keyboard.NewWatcher() // Query for the map containing information about all keys status := watcher.States() left := status[keyboard.ArrowLeft] if left == keyboard.Down { // The arrow to left is being held down // Do something! }
要获得当前当前按下的键的列表,只需遍历地图并列出value为Down的键即可。