>  기사  >  백엔드 개발  >  Go에서 장기 실행 프로세스에 대해 시각적으로 매력적인 대기/바쁨 표시기를 어떻게 만들 수 있나요?

Go에서 장기 실행 프로세스에 대해 시각적으로 매력적인 대기/바쁨 표시기를 어떻게 만들 수 있나요?

Patricia Arquette
Patricia Arquette원래의
2024-10-24 18:59:02784검색

How can I create a visually appealing waiting/busy indicator for long-running processes in Go?

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

제공된 예와 같이 하위 프로세스를 실행할 때 다음을 제공하는 것이 도움이 될 수 있습니다. 특히 실행 시간이 길어질 수 있는 경우 프로세스가 실행 중임을 나타내는 시각적 피드백입니다. 이렇게 하면 사용자가 프로그램이 멈췄다고 생각하는 것을 방지할 수 있습니다.

대기/바쁨 표시기를 생성하기 위한 한 가지 접근 방식은 프로세스가 실행되는 동안 고루틴을 활용하여 주기적으로 무언가를 인쇄하는 것입니다. 프로세스가 완료되면 고루틴에 신호를 보내 종료할 수 있습니다.

다음은 이 접근 방식을 보여주는 코드 샘플입니다.

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

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