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!