Mengelakkan Ralat Kebuntuan dengan Import HTTP Go
Dalam Go, menggunakan pakej net/http untuk komunikasi HTTP memperkenalkan tingkah laku halus yang boleh menjejaskan pengesanan kebuntuan.
Pertimbangkan kod berikut:
<code class="go">package main import ( "fmt" "net/http" ) func Extract(url string) ([]string, error) { http.Get(url) var links []string return links, nil } func crawl(url string) []string { list, _ := Extract(url) return list } func main() { var ch = make(chan int) ch <- 1 }</code>
Tanpa import bersih/http, menjalankan kod ini akan mengakibatkan ralat "kebuntuan". Ini kerana fungsi Extract disekat pada permintaan HTTP tanpa panggilan yang sepadan ke ServeHTTP atau Close.
Walau bagaimanapun, jika pakej net/http diimport, walaupun tanpa memanggil fungsi Extract, ralat "kebuntuan" hilang. Ini kerana mengimport pakej bersih memulakan tinjauan latar belakang Goroutines yang berkomunikasi secara automatik dengan pelayan HTTP.
Tingkah laku ini didokumenkan dalam catatan blog Go "Goroutine Pooling in NetHttp":
"The net pakej memulakan goroutine latar belakang ringkas yang secara berkala menguji kebolehcapaian ke pelayan HTTP Ujian goroutine mudah keluar jika pelayan HTTP tidak dapat dicapai dan kemudian dimulakan semula apabila pelayan menjadi boleh dicapai Ini memastikan bahawa goroutine yang mempunyai net.Dail dalam panggilan mereka timbunan tidak dilaporkan secara tersilap sebagai disekat."
Mengimport pakej bersih dengan berkesan melumpuhkan pengesan jalan buntu untuk sebarang kod yang menggunakan net.Dail, yang termasuk komunikasi HTTP.
Untuk aplikasi yang memerlukan lebih ketat pengesanan kebuntuan, adalah disyorkan untuk mengelak mengimport pakej bersih sehingga perlu untuk mewujudkan komunikasi dengan pelayan HTTP.
Atas ialah kandungan terperinci Bagaimanakah mengimport pakej net/http dalam Go menjejaskan pengesanan ralat kebuntuan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!