我正在寻找一个轻量级的,在最好的情况下纯 go 实现来捕获space而无需跟随enter。
我见过一些人在 Go 或termbox中使用 C 作为 extern 。真的没有其他方法可以捕获每个键盘敲击吗?
我已经考虑过直接打开设备(在 Linux 中)并尝试从那里读取。
关于如何做到这一点的任何建议都会很棒!
如果没有更多信息,很难找到您正在寻找的完美示例。但是,基本思想是您需要将终端切换到原始模式,在这种模式下,输入会立即传递给您的应用程序。 x/crypto/ssh/terminal是一个提供此功能的流行库:
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
}
}
}