Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah saya boleh mencipta penunjuk menunggu/sibuk yang menarik secara visual untuk proses yang berjalan lama dalam Go?

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

Patricia Arquette
Patricia Arquetteasal
2024-10-24 18:59:02784semak imbas

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>

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>

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!

Kenyataan:
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