package main import "github.com/eiannone/keyboard" type Keyboard struct { Events chan byte } func NewKeyboard() (*Keyboard, error) { err := keyboard.Open() return &Keyboard{ Events: make(chan byte), }, err } func (k *Keyboard) Listen() { defer func() { recover() }() for { r, _, err := keyboard.GetKey() if err != nil { continue } b := byte(r) k.Events <- b } } func (k *Keyboard) Next() byte { return <-k.Events } func (k *Keyboard) Close() { keyboard.Close() close(k.Events) }