在 Go 中捕获 space 键而无需输入

Capture the space key in Go without following enter

我正在寻找一个轻量级的,在最好的情况下是纯 go 实现来捕获 space 而无需跟随 enter .

我看到有人在 Go 或 termbox 中使用 C 作为 extern。真的没有其他方法可以捕捉每一次键盘敲击吗?

我已经考虑过直接打开设备(在 Linux 中)并尝试从那里读取。

任何有关如何执行此操作的建议都很棒!

没有更多信息,很难找到一个完美的例子来满足您的需求。但是,基本思想是您需要将终端切换到原始模式,输入会立即传递给您的应用程序。 x/crypto/ssh/terminal 是一个提供此功能的流行库:[​​=13=]

package main

import (
    "fmt"
    "os"

    "golang.org/x/crypto/ssh/terminal"
)

func main() {
    oldState, err := terminal.MakeRaw(0)
    if err != nil {
        panic(err)
    }
    defer terminal.Restore(0, oldState)
    for {
        var oneChar [1]byte
        _, err := os.Stdin.Read(oneChar[:])
        const ETX = '\x03' // ^C
        const EOT = '\x04' // ^D
        if err != nil || oneChar[0] == ETX || oneChar[0] == EOT {
            break
        }
        if oneChar[0] == ' ' {
            fmt.Println("Space pressed!\r")
            break
        }
    }
}