>백엔드 개발 >Golang >줄 바꿈 없이 실시간으로 채널에 키 입력을 보내는 방법은 무엇입니까?

줄 바꿈 없이 실시간으로 채널에 키 입력을 보내는 방법은 무엇입니까?

DDD
DDD원래의
2024-10-30 07:41:02300검색

How to Send Keystrokes to a Channel Without Newline in Real Time?

줄바꿈 없이 채널에 키 입력 보내기

프로그래밍에서 일반적으로 필요한 것은 사용자 입력에서 채널로 키 입력을 실제로 보내는 것입니다. 시간. 그러나 기본적으로 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.