줄바꿈 없이 채널에 키 입력 보내기
프로그래밍에서 일반적으로 필요한 것은 사용자 입력에서 채널로 키 입력을 실제로 보내는 것입니다. 시간. 그러나 기본적으로 stdin은 라인 버퍼링됩니다. 즉, 모든 입력을 트리거하려면 개행 문자가 필요합니다.
제공한 코드 조각:
func chars() <-chan byte { ch := make(chan byte) reader := bufio.NewReader(os.Stdin) go func() { for { char, err := reader.ReadByte() if err != nil { log.Fatal(err) } ch <- char } }() return ch }
이를 달성하려고 시도했지만 실패했습니다. stdin의 라인 버퍼 특성. reader.ReadByte() 메서드는 개행 문자가 입력될 때까지 차단됩니다.
답변에서 제안된 한 가지 해결책은 터미널 제어를 위한 일련의 기능을 제공하는 라이브러리인 ncurses를 사용하는 것입니다. Ncurses를 사용하면 버퍼링되지 않은 모드로 전환하도록 터미널을 구성하여 각 키 입력이 즉시 채널로 전송되도록 할 수 있습니다.
또 다른 해결책은 더 높은 수준의 API를 제공하는 go-termbox 패키지를 사용하는 것입니다. 터미널에서 입력 및 출력 작업을 수행합니다. go-termbox를 사용하면 사용자 입력을 읽기 전에 SetInputMode(InputEsc)를 호출하여 버퍼링되지 않은 입력을 얻을 수 있습니다.
Linux 관련 구현의 경우 termios 라이브러리를 탐색하거나 syscall 패키지를 사용하여 직접 syscall을 만들 수 있습니다. 터미널 동작을 구성합니다. 각 플랫폼의 버퍼링된 입력 및 버퍼링되지 않은 입력 처리에 대한 구체적인 내용은 해당 문서나 소스 코드에서 조사해야 합니다.
위 내용은 줄 바꿈 없이 실시간으로 채널에 키 입력을 보내는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!