Прочитайте символ со стандартного ввода в Go (без нажатия Enter)
Я хочу показать свои приложения:
press any key to exit ...
И когда я нажал любой ключ, он выйдет.
Как я могу это достичь?
Примечание. У меня есть googled, но все, что я нашел, нужно было нажать enter в конце. Я хочу что-то вроде Console.ReadKey()
в С#.
Я запускаю MS Windows.
Ответы
Ответ 1
termbox-go - это легкий пакет Go-native, который предлагает некоторые рудиментарные терминальные элементы управления. Включая возможность входа в режим raw (читайте по одному символу за раз без по умолчанию по умолчанию).
Он также имеет неплохую совместимость в разных системах.
И keyboard расширяет termbox-go, чтобы предоставить дополнительные функциональные возможности клавиатуры, такие как сочетания клавиш и последовательности клавиш.
Ответ 2
Это минимальный рабочий пример для тех, кто работает в системе UNIX:
package main
import (
"fmt"
"os"
"os/exec"
)
func main() {
// disable input buffering
exec.Command("stty", "-F", "/dev/tty", "cbreak", "min", "1").Run()
// do not display entered characters on the screen
exec.Command("stty", "-F", "/dev/tty", "-echo").Run()
var b []byte = make([]byte, 1)
for {
os.Stdin.Read(b)
fmt.Println("I got the byte", b, "("+string(b)+")")
}
}
Ответ 3
go-termbox очень тяжелый. Он хочет захватить все окно терминала. Например, он очищает экран при запуске, что может не соответствовать вашим ожиданиям.
Я положил это вместе на OSX. Просто крошечный getchar():
https://github.com/paulrademacher/climenu/blob/master/getchar.go
Ответ 4
Вы можете использовать эту библиотеку (мой): https://github.com/eiannone/keyboard
Это пример получения одного нажатия клавиши:
char, _, err := keyboard.GetSingleKey()
if (err != nil) {
panic(err)
}
fmt.Printf("You pressed: %q\r\n", char)
Ответ 5
Вы можете прочитать одно нажатие клавиши с терминала в необработанном режиме. Здесь - это пакет, который должен обеспечить исходный режим терминала для вашей программы. Catch: это только Linux.
Ответ 6
Попробуйте это http://play.golang.org/p/kg-QirlucY.
Просто прочитайте os.Stdin
в конце func main
Ответ 7
Я пробовал blinry код, но он не работает для меня. os.Stdin.Read(b) швы, чтобы по-прежнему требовался ключ возврата. Как я могу прочитать необработанный поток по одному байту за раз от стандартного в? Я понимаю, что клавиша со стрелкой будет 3 байта.