실행 중인 프로세스에 대한 대기/바쁨 표시기 생성
"npm install"과 같은 하위 프로세스를 실행할 때 상당한 시간이 걸릴 수 있습니다. 패키지를 완료하고 다운로드하는 프로세스입니다. 이 시간 동안 프로세스가 진행 중임을 사용자에게 피드백을 제공하는 것이 중요합니다.
통화 중 표시 구현
통화 중 표시를 만들려면 다음을 수행하세요. 하위 프로세스와 동시에 실행되는 다른 고루틴을 활용합니다. 이 고루틴은 주기적으로 문자(예: 점)를 콘솔에 인쇄하여 활동을 표시합니다. 하위 프로세스가 완료되면 고루틴에 종료 신호를 보냅니다.
<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...") shutdownCh := make(chan struct{}) // Channel to signal goroutine termination go indicator(shutdownCh) err := cmd.Run() close(shutdownCh) // Signal indicator goroutine 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!