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

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

Linda Hamilton
Linda Hamilton원래의
2024-10-25 02:37:30463검색

How to Create a Waiting/Busy Indicator for Long-Running Processes in Go?

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

"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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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