![다른 출력을 덮어쓰지 않고 진행 상황을 애니메이션화하는 방법은 무엇입니까?](https://linux55.com/image/202296/%EB%8B%A4%EB%A5%B8%20%EC%B6%9C%EB%A0%A5%EC%9D%84%20%EB%8D%AE%EC%96%B4%EC%93%B0%EC%A7%80%20%EC%95%8A%EA%B3%A0%20%EC%A7%84%ED%96%89%20%EC%83%81%ED%99%A9%EC%9D%84%20%EC%95%A0%EB%8B%88%EB%A9%94%EC%9D%B4%EC%85%98%ED%99%94%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
진행률 표시 줄에 애니메이션을 적용하기 위해 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
}
}
}
이 접근 방식은 작업자 스레드가 시간 초과되는 경우와 같이 인쇄하려는 별도의 고루틴이 없는 경우에만 작동합니다. 고루틴이 인쇄되면 라인이 덮어쓰여지고 애니메이션 라인이 "채색"됩니다. 애니메이션 로직을 이해하기 위해 내 프로젝트의 모든 인쇄 문을 다시 작성하지 않고 이 문제를 쉽게 해결할 수 있는 방법이 있습니까?
한 가지 해결책은 라인을 버퍼링한 다음 애니메이션 루프가 버퍼를 동기적으로 인쇄하도록 하는 인쇄 함수 래퍼를 작성하는 것입니다. 하지만 이는 프로젝트의 모든 코드가 애니메이션 로직을 인식하도록 해야 함을 의미합니다.