kvaks
@kvaks

Как на GO из консоли считать нажатие стрелок на клавиатуре?

Собственно хочется получить нажатия стрелок вверх\вниз, без нажатия enter
  • Вопрос задан
  • 244 просмотра
Решения вопроса 1
В Go можно использовать пакет "github.com/eiannone/keyboard" для считывания нажатий клавиш с клавиатуры, включая стрелки. Пакет keyboard позволяет легко обрабатывать события нажатия и отпускания клавиш и читать нажатые клавиши с помощью функций-обратных вызовов.

Вот пример кода, который считывает нажатие стрелок с клавиатуры:
Код

package main

import (
    "fmt"
    "os"

    "github.com/eiannone/keyboard"
)

func main() {
    // Инициализация пакета клавиатуры
    if err := keyboard.Open(); err != nil {
        panic(err)
    }
    defer func() {
        _ = keyboard.Close()
    }()

    fmt.Println("Нажмите стрелку влево, стрелку вправо или Esc для выхода...")

    for {
        char, key, err := keyboard.GetKey()
        if err != nil {
            panic(err)
        }

        if key == keyboard.KeyArrowLeft {
            fmt.Println("Стрелка влево нажата")
        } else if key == keyboard.KeyArrowRight {
            fmt.Println("Стрелка вправо нажата")
        } else if key == keyboard.KeyEsc {
            fmt.Println("Выход")
            break
        }

        if char == 'q' || char == 'Q' {
            fmt.Println("Выход")
            break
        }
    }
}



Этот код открывает консоль и ждет нажатия стрелки влево, стрелки вправо или клавиши "Esc" для выхода. Когда нажата соответствующая клавиша, выводится соответствующее сообщение, и программа продолжает ожидать новых нажатий клавиш. Если нажата клавиша "q" или "Q", программа также завершается.

На MacOS можно использовать пакет "github.com/nsf/termbox-go" для считывания нажатий клавиш с консоли, включая стрелки. Этот пакет предоставляет набор функций для работы с терминалом, включая считывание нажатых клавиш.

Код

package main

import (
	"fmt"
	"log"
	"os"

	"github.com/nsf/termbox-go"
)

func main() {
	err := termbox.Init()
	if err != nil {
		log.Fatal(err)
	}
	defer termbox.Close()

	fmt.Println("Нажмите стрелку влево, стрелку вправо или Esc для выхода...")

	for {
		switch ev := termbox.PollEvent(); ev.Type {
		case termbox.EventKey:
			switch ev.Key {
			case termbox.KeyArrowLeft:
				fmt.Println("Стрелка влево нажата")
			case termbox.KeyArrowRight:
				fmt.Println("Стрелка вправо нажата")
			case termbox.KeyEsc:
				fmt.Println("Выход")
				os.Exit(0)
			}
		}
	}
}



Этот код использует пакет termbox-go для инициализации терминала и считывания событий клавиш. В цикле он ожидает нажатия стрелки влево, стрелки вправо или клавиши "Esc". Когда нажата соответствующая клавиша, выводится соответствующее сообщение. Если нажата клавиша "Esc", программа завершается с кодом выхода 0.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы