고루틴을 사용하여 Go에서 장기 실행 프로세스에 대한 사용 중 표시기를 만드는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-10-25 16:36:47
원래의
356명이 탐색했습니다.

How to create busy indicators for long-running processes in Go using goroutines?

실행된 프로세스에 대한 사용 중 표시 만들기

오랜 시간이 걸리는 하위 프로세스를 실행할 때 이를 알 수 있는 방법을 사용자에게 제공하는 것이 중요합니다. 프로세스가 실제로 실행 중이라는 것입니다. 표시기가 없으면 사용자는 진행 상황을 인식하지 못하거나 시스템이 응답하지 않는다고 생각할 수도 있습니다.

이 문제를 해결하기 위해 다양한 통화 중 표시기를 구현하여 사용자에게 시각적 신호를 제공할 수 있습니다. 그러한 표시기 중 하나는 콘솔에 점이나 진행률 표시줄과 같은 문자를 주기적으로 인쇄하는 것입니다.

사용 중 표시기에 고루틴 사용

고루틴은 경량 스레드입니다. 통화 중 표시기 관리를 담당하는 별도의 스레드를 생성하는 데 사용할 수 있는 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>
로그인 후 복사

이 예에서는 콘솔에 점을 주기적으로 인쇄하는 Indicator()라는 이름의 고루틴이 생성됩니다. 고루틴은 shutdownCh 채널에서 신호가 수신될 때까지 인쇄를 계속합니다. 하위 프로세스가 완료되면 기본 고루틴은 shutdownCh를 닫아 표시기() 고루틴을 종료하고 점 인쇄를 중지합니다.

통화 표시 사용자 정의

통화 표시는 다음을 수행할 수 있습니다. 인쇄 속도를 조정하거나 다른 문자나 패턴을 추가하여 추가로 사용자 정의할 수 있습니다. 예를 들어, 1초마다 점을 인쇄하고 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿