Stdin에서 Go의 특수 키 읽기
Go의 stdin에서 사용자 입력을 읽을 때 "와 같은 특수 키를 감지해야 하는 경우가 많습니다. 특정 명령이나 편집 작업을 하려면 Enter" 또는 "백스페이스"를 누릅니다. 이를 달성하기 위해 이러한 특수 키를 해석하는 적절한 접근 방식을 살펴보겠습니다.
제공된 코드 조각에서 프로그램은 지속적으로 stdin을 읽고 입력을 문자열에 추가합니다. 특정 키를 감지하려면 해당하는 바이트 배열이나 문자열 표현을 결정해야 합니다.
이러한 값을 찾으려면 termbox-go와 같은 라이브러리를 활용할 수 있습니다. 이는 키 누르기 및 관련 코드를 캡처할 수 있는 이벤트 기반 인터페이스를 제공합니다.
termbox-go를 사용하여 다음 코드를 고려하세요.
package main import ( "fmt" term "github.com/nsf/termbox-go" ) func main() { err := term.Init() if err != nil { panic(err) } defer term.Close() fmt.Println("Press any key to see their ASCII code or press ESC button to quit") keyPressListenerLoop: for { switch ev := term.PollEvent(); ev.Type { case term.EventKey: switch ev.Key { case term.KeyEsc: break keyPressListenerLoop case term.KeyEnter: // Handle enter key press case term.KeyBackspace: // Handle backspace key press // Add other special keys here } case term.EventError: panic(ev.Err) } } }
이 코드는 이벤트 리스너를 설정합니다. termbox-go를 사용하고 키 누르기 이벤트를 기다립니다. 키를 누르면 코드가 해당 유형과 키 코드를 확인합니다. 키 코드를 기반으로 "enter" 또는 "backspace"와 같은 특정 키를 처리하도록 사용자 정의 논리를 구현할 수 있습니다. 예:
case term.KeyEnter: fmt.Println("Enter key pressed") case term.KeyBackspace: fmt.Println("Backspace key pressed")
또는 "enter" 키 누름을 감지하는 것이 유일한 요구 사항인 경우 더 간단한 접근 방식을 사용할 수 있습니다.
package main import ( "fmt" "os" "bufio" ) func main() { fmt.Println("Press ESC button or Ctrl-C to exit this program") fmt.Println("Press Enter to continue") for { consoleReader := bufio.NewReaderSize(os.Stdin, 1) fmt.Print("> ") input, _ := consoleReader.ReadByte() ascii := input // ESC = 27 and Ctrl-C = 3 if ascii == 27 || ascii == 3 { fmt.Println("Exiting...") os.Exit(0) } if ascii == 10 { // Enter key has ASCII value 10 fmt.Println("Enter key pressed") } } }
이 코드는 bufio의 consoleReader를 사용하여 한 번에 한 문자씩 입력하여 "Enter" 키 누름을 감지할 수 있습니다.
이러한 접근 방식을 활용하면 개발자는 효과적으로 다음을 수행할 수 있습니다. 표준 입력에서 읽을 때 Go 프로그램의 특수 키 입력을 처리합니다.
위 내용은 Go의 표준 입력에서 특수 키(Enter 및 Backspace 등)를 어떻게 감지할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!