실행된 프로세스에 대한 대기/바쁨 표시기 생성
제공된 예와 같이 하위 프로세스를 실행할 때 다음을 제공하는 것이 도움이 될 수 있습니다. 특히 실행 시간이 길어질 수 있는 경우 프로세스가 실행 중임을 나타내는 시각적 피드백입니다. 이렇게 하면 사용자가 프로그램이 멈췄다고 생각하는 것을 방지할 수 있습니다.
대기/바쁨 표시기를 생성하기 위한 한 가지 접근 방식은 프로세스가 실행되는 동안 고루틴을 활용하여 주기적으로 무언가를 인쇄하는 것입니다. 프로세스가 완료되면 고루틴에 신호를 보내 종료할 수 있습니다.
다음은 이 접근 방식을 보여주는 코드 샘플입니다.
<code class="go">package main import ( "fmt" "log" "os/exec" "time" ) 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>
이 코드는 티커를 사용하여 점을 인쇄합니다. 프로세스가 완료될 때 종료되도록 표시기 고루틴에 신호를 보내는 종료 채널.
점 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!