진행률 표시 줄에 애니메이션을 적용하기 위해 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
}
}
}
이 접근 방식은 작업자 스레드가 시간 초과되는 경우와 같이 인쇄하려는 별도의 고루틴이 없는 경우에만 작동합니다. 고루틴이 인쇄되면 라인이 덮어쓰여지고 애니메이션 라인이 "채색"됩니다. 애니메이션 로직을 이해하기 위해 내 프로젝트의 모든 인쇄 문을 다시 작성하지 않고 이 문제를 쉽게 해결할 수 있는 방법이 있습니까?
한 가지 해결책은 라인을 버퍼링한 다음 애니메이션 루프가 버퍼를 동기적으로 인쇄하도록 하는 인쇄 함수 래퍼를 작성하는 것입니다. 하지만 이는 프로젝트의 모든 코드가 애니메이션 로직을 인식하도록 해야 함을 의미합니다.