>  기사  >  백엔드 개발  >  Go에서 실행된 프로세스에 대한 대기/바쁨 표시기를 만드는 방법은 무엇입니까?

Go에서 실행된 프로세스에 대한 대기/바쁨 표시기를 만드는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-25 06:21:02358검색

How to Create a Waiting/Busy Indicator for Executed Processes in Go?

실행된 프로세스에 대한 대기/바쁨 표시기 생성

exec.Command를 사용하여 npm 패키지를 설치하는 등 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>

더 시각적으로 매력적인 표시기를 위해 표시기 기능을 수정하여 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.