사용 중 표시기로 프로세스 실행 가시성 관리
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 } } }</code>
이 고루틴은 종료하라는 신호가 전송될 때까지 계속해서 점을 인쇄합니다.
프로세스와 통합 실행
주 실행 루틴에서는 사용 중 표시기를 시작하고 하위 프로세스가 완료될 때까지 기다릴 수 있습니다.
<code class="go">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>
프로세스가 완료되면 표시기 고루틴은 다음과 같습니다. 줄 끝 문자가 인쇄됩니다.
사용자 경험 향상
사용자 경험을 더욱 향상시키기 위해 표시기를 사용자 정의할 수 있습니다. 예를 들어, 특정 개수의 점 뒤에 새 줄을 인쇄할 수 있습니다.
<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!