我正在寻找一种轻量级且最好的情况下使用go的实现,以捕获空间而无需后续输入。

我见过有人在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
        }
    }
}

关于go - 在Go中捕获空格键而无需按Enter,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50086253/

10-09 15:20