실행된 프로세스에 대한 사용 중 표시 만들기
오랜 시간이 걸리는 하위 프로세스를 실행할 때 이를 알 수 있는 방법을 사용자에게 제공하는 것이 중요합니다. 프로세스가 실제로 실행 중이라는 것입니다. 표시기가 없으면 사용자는 진행 상황을 인식하지 못하거나 시스템이 응답하지 않는다고 생각할 수도 있습니다.
이 문제를 해결하기 위해 다양한 통화 중 표시기를 구현하여 사용자에게 시각적 신호를 제공할 수 있습니다. 그러한 표시기 중 하나는 콘솔에 점이나 진행률 표시줄과 같은 문자를 주기적으로 인쇄하는 것입니다.
사용 중 표시기에 고루틴 사용
고루틴은 경량 스레드입니다. 통화 중 표시기 관리를 담당하는 별도의 스레드를 생성하는 데 사용할 수 있는 Go 프로그래밍 언어입니다. 이를 수행하는 방법은 다음과 같습니다.
<code class="go">func indicator(shutdownCh <-chan struct{}) { ticker := time.NewTicker(time.Second) defer ticker.Stop() for { select { case <-ticker.C: fmt.Print(".") case <-shutdownCh: return } } } func main() { cmd := exec.Command("npm", "install") log.Printf("Running command and waiting for it to finish...") // Start indicator: shutdownCh := make(chan struct{}) go indicator(shutdownCh) err := cmd.Run() close(shutdownCh) // Signal indicator() to terminate fmt.Println() log.Printf("Command finished with error: %v", err) }</code>
이 예에서는 콘솔에 점을 주기적으로 인쇄하는 Indicator()라는 이름의 고루틴이 생성됩니다. 고루틴은 shutdownCh 채널에서 신호가 수신될 때까지 인쇄를 계속합니다. 하위 프로세스가 완료되면 기본 고루틴은 shutdownCh를 닫아 표시기() 고루틴을 종료하고 점 인쇄를 중지합니다.
통화 표시 사용자 정의
통화 표시는 다음을 수행할 수 있습니다. 인쇄 속도를 조정하거나 다른 문자나 패턴을 추가하여 추가로 사용자 정의할 수 있습니다. 예를 들어, 1초마다 점을 인쇄하고 5개 점마다 새 줄을 인쇄하려면 표시기() 함수를 다음과 같이 수정할 수 있습니다.
<code class="go">func indicator(shutdownCh <-chan struct{}) { ticker := time.NewTicker(time.Second) defer ticker.Stop() for i := 0; ; { select { case <-ticker.C: fmt.Print(".") if i++; i%5 == 0 { fmt.Println() } case <-shutdownCh: return } } }</code>
응용 프로그램에 통화 중 표시기를 통합하면 다음을 제공할 수 있습니다. 응답성이 뛰어나고 사용자 친화적인 환경을 제공하여 사용자가 결과를 기다리는 동안 프로세스가 백그라운드에서 실행되고 있음을 보장합니다.
위 내용은 고루틴을 사용하여 Go에서 장기 실행 프로세스에 대한 사용 중 표시기를 만드는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!