Dalam kod yang anda berikan, anda telah melaksanakan mekanisme tamat masa menggunakan pernyataan pilih untuk mengendalikan sama ada hasil daripada fungsi findCicCode() atau tamat masa daripada 50 milisaat. Walau bagaimanapun, anda menyatakan kebimbangan tentang potensi kebocoran sumber jika panggilan HTTP terus dilaksanakan walaupun selepas tamat masa.
Untuk menangani isu ini, anda boleh memanfaatkan konsep konteks dalam Go. Konteks menyediakan cara untuk mengaitkan nilai khusus konteks dengan goroutin dan membenarkan pembatalan. Dengan konteks, anda boleh membatalkan panggilan HTTP yang sedang berjalan apabila tamat masa berlaku.
Berikut ialah contoh cara anda boleh melaksanakan pembatalan konteks untuk permintaan HTTP:
<code class="go">package main import ( "context" "fmt" "net/http" "time" ) type Response struct { data interface{} status bool } func Find() (interface{}, bool) { ch := make(chan Response, 1) ctx, cancel := context.WithTimeout(context.Background(), time.Second) defer cancel() // Ensure cancelation when the function exits go func() { data, status := findCicCode(ctx) ch <- Response{data: data, status: status} }() select { case response := <-ch: return response.data, response.status case <-time.After(50 * time.Millisecond): return "Request timed out", false } } func main() { data, timedOut := Find() fmt.Println(data, timedOut) }</code>
Dalam kod yang diubah suai ini:
Dengan menggunakan pendekatan ini, anda memastikan bahawa sebarang permintaan HTTP yang berterusan dibatalkan apabila tamat masa dicapai, menghalang penggunaan sumber yang tidak perlu.
Atas ialah kandungan terperinci Bagaimanakah saya boleh membatalkan permintaan HTTP dengan berkesan dalam Go apabila tamat masa berlaku?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!