首页 > 后端开发 > Golang > 正文

如何在 Go 中为执行的进程创建等待/忙碌指示器?

Mary-Kate Olsen
发布: 2024-10-25 06:21:02
原创
374 人浏览过

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

为执行进程创建等待/忙碌指示器

在 Go 中执行子进程时,例如使用 exec.Command 安装 npm 包时,它可能需要很长时间才能看到输出。为了增强用户体验,请考虑显示一个忙碌指示器来指示该过程正在进行中。

解决方案:

一种有效的解决方案包括使用单独的 goroutine 定期当进程运行时,将字符(例如点)打印到控制台。当该过程完成时,指示器 goroutine 可以终止。

<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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!