다른 출력을 덮어쓰지 않고 진행 상황을 애니메이션화하는 방법은 무엇입니까?

다른 출력을 덮어쓰지 않고 진행 상황을 애니메이션화하는 방법은 무엇입니까?

진행률 표시 줄에 애니메이션을 적용하기 위해 ANSI 제어 코드를 사용하는 동안 잠시 동안 실행되는 Go 프로그램을 작성한다고 가정해 보겠습니다. 예를 들어,

outer:
    for {
        select {
        case <-ticker:
            fmt.Printf("\033[%dF\033[J", linesToOverwrite)
            display()
        case <-waitChan:
            fmt.Printf("\033[%dF\033[J", linesToOverwrite)
            display()
            break outer
        }
    }
}

이 접근 방식은 작업자 스레드가 시간 초과되는 경우와 같이 인쇄하려는 별도의 고루틴이 없는 경우에만 작동합니다. 고루틴이 인쇄되면 라인이 덮어쓰여지고 애니메이션 라인이 "채색"됩니다. 애니메이션 로직을 이해하기 위해 내 프로젝트의 모든 인쇄 문을 다시 작성하지 않고 이 문제를 쉽게 해결할 수 있는 방법이 있습니까?

한 가지 해결책은 라인을 버퍼링한 다음 애니메이션 루프가 버퍼를 동기적으로 인쇄하도록 하는 인쇄 함수 래퍼를 작성하는 것입니다. 하지만 이는 프로젝트의 모든 코드가 애니메이션 로직을 인식하도록 해야 함을 의미합니다.

관련 정보