go - Golang 控制台上的键盘事件

标签 go command-line-interface keyboard-events

我现在正在 Golang 中创建基于 CUI 的扫雷器。 我想处理键盘事件来操纵游戏。

你有什么想法来实现这个目标吗?

最佳答案

每个操作系统处理键盘按下的方式略有不同。您可以编写一个库,将这些抽象成一个通用接口(interface),或者更好的是,使用其他人已经编写的接口(interface)。

如评论中所述,termbox-go是一个不错的选择。它很稳定并且被广泛采用。

另一个不错的选择是 eiannone/keyboard它更小,受到 termbox-go 的积极开发和启发。

对于您的特定用例,您可能希望有一个监听键盘事件的 go 例程和一个处理它们的 channel 。以下是使用其文档中的键盘库的示例。

package main

import (
    "fmt"
    "github.com/eiannone/keyboard"
)

func main() {
    keysEvents, err := keyboard.GetKeys(10)
    if err != nil {
        panic(err)
    }
    defer func() {
        _ = keyboard.Close()
    }()

    fmt.Println("Press ESC to quit")
    for {
        event := <-keysEvents
        if event.Err != nil {
            panic(event.Err)
        }
        fmt.Printf("You pressed: rune %q, key %X\r\n", event.Rune, event.Key)
        if event.Key == keyboard.KeyEsc {
            break
        }
    }
}

关于go - Golang 控制台上的键盘事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30191171/

相关文章:

C# Oakton 标志与参数

docker - shell 到 Docker 容器后如何编辑文件?

android - 从 CLI 构建时,Cordova 向 AndroidManifest.xml 添加了不需要的权限

go - 为什么客户端和服务器会引起数据争用?

gorilla jsonrpc 得到空响应

javascript - POST 请求在 beego 框架上被视为 OPTIONS

c - 从Linux输入设备访问键

c# - Windows Phone 8 检测键盘何时关闭

c# - 良好的按键处理设计

postgresql - Postgresql 的 Golang 过程语言