Без дополнительной информации сложно найти идеальный пример того, что вы ищете. Тем не менее, основная идея заключается в том, что вам нужно переключить ваш терминал в сырой режим, где ввод немедленно передается в ваше приложение. 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
}
}
}