如何应对Go中的按键事件?

mar*_*cio 8 go

我在Go中有一个REPL应用程序应该对键盘按下事件做出反应(每个键按下键的操作不同)但是ReadString在阅读之前需要按下返回键os.Stdin:

import (
    "bufio"
    "os"
)

for {
    reader := bufio.NewReader(os.Stdin)
    key, _ := reader.ReadString('\n')
    deferKey(key)
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能对Go中的关键新闻事件作出反应?

use*_*176 6

游戏引擎通常实现这种功能。它们通常也与平台无关(通常至少是 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!
}
Run Code Online (Sandbox Code Playgroud)

获取当前按下的键的列表只需迭代映射并列出值为 Down 的键即可。

  • 是的,但是谁在填充该地图,必须设置状态,这个库无法满足您的需要。 (4认同)