Dalam kod yang disediakan, anda telah melaksanakan fungsi, Find(), yang menggunakan pernyataan goroutine (go func()) untuk pengambilan data tak segerak menggunakan findCicCode(). Anda telah menetapkan tamat masa 50 milisaat untuk menerima respons daripada goroutine.
Walau bagaimanapun, anda bimbang tentang kemungkinan kebocoran goroutine jika tamat masa melebihi. Selain itu, anda ingin dapat membatalkan permintaan HTTP yang dibuat oleh findCicCode() apabila tamat masa berlaku.
Pencegahan Kebocoran Goroutine
Untuk mengendalikan kebocoran goroutine, ia adalah penting untuk memastikan bahawa sebarang goroutine yang dibuat dalam skop tertentu ditamatkan sebelum skop tamat. Dalam kes ini, adalah penting untuk membatalkan goroutine dalam pernyataan pilihan apabila tamat masa dicapai:
<code class="go">case <-time.After(50 * time.Millisecond): // Cancel the goroutine to prevent a potential leak close(ch) return "Request timed out", false</code>
Pembatalan Permintaan HTTP
Untuk membatalkan permintaan HTTP dalam goroutine, anda boleh memanfaatkan konteks.Konteks dan konteks.CancelFunc disediakan oleh pustaka standard Go:
<code class="go">// Create a context with a timeout of 50 milliseconds ctx, cancel := context.WithTimeout(context.Background(), 50*time.Millisecond) defer cancel() // Execute the findCicCode() function within this context data, status := findCicCodeWithContext(ctx) // If the context is canceled (timeout), the HTTP requests will be aborted</code>
Atas ialah kandungan terperinci Bagaimana untuk Mencegah Kebocoran Goroutine dan Membatalkan Permintaan HTTP dalam Masa Tamat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!