Bagaimanakah saya boleh mencipta penunjuk menunggu/sibuk yang menarik secara visual untuk proses yang berjalan lama dalam Go?

Patricia Arquette
Lepaskan: 2024-10-24 18:59:02
asal
800 orang telah melayarinya

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

Mencipta Penunjuk Menunggu/Sibuk untuk Proses yang Dilaksanakan

Apabila melaksanakan proses kanak-kanak, seperti dalam contoh yang diberikan, ia boleh memberi manfaat untuk menyediakan maklum balas visual kepada pengguna yang menunjukkan bahawa proses sedang berjalan, terutamanya apabila masa pelaksanaan boleh menjadi panjang. Ini boleh membantu menghalang pengguna daripada berfikir bahawa program telah membeku.

Untuk mencipta penunjuk menunggu/sibuk, satu pendekatan ialah menggunakan goroutine untuk mencetak sesuatu secara berkala semasa proses sedang dijalankan. Apabila proses selesai, isyarat boleh dihantar ke goroutine untuk menamatkannya.

Berikut ialah contoh kod yang menunjukkan pendekatan ini:

<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>
Salin selepas log masuk

Kod ini menggunakan penanda untuk mencetak titik setiap saat dan saluran penutupan untuk memberi isyarat goroutine penunjuk untuk ditamatkan apabila proses selesai.

Untuk memulakan baris baharu selepas setiap lima titik, ubah suai fungsi penunjuk seperti berikut:

<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>
Salin selepas log masuk

Dengan melaksanakan jenis penunjuk ini, anda boleh memberikan maklum balas visual yang jelas kepada pengguna, yang menunjukkan bahawa proses sedang berjalan dan belum beku.

Atas ialah kandungan terperinci Bagaimanakah saya boleh mencipta penunjuk menunggu/sibuk yang menarik secara visual untuk proses yang berjalan lama dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!