Задать вопрос
Ответы пользователя по тегу Go
  • Как на GO из консоли считать нажатие стрелок на клавиатуре?

    В 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.
    Ответ написан
    2 комментария