>백엔드 개발 >Golang >사용 중 표시기를 사용하여 Go에서 프로세스 실행 가시성을 어떻게 향상시킬 수 있나요?

사용 중 표시기를 사용하여 Go에서 프로세스 실행 가시성을 어떻게 향상시킬 수 있나요?

Barbara Streisand
Barbara Streisand원래의
2024-10-24 19:43:29951검색

How can you enhance process execution visibility in Go with busy indicators?

사용 중 표시기로 프로세스 실행 가시성 관리

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

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