Mengapa Kod Ini Tidak Menghasilkan Ralat "Deadlock"?
Kod yang disediakan termasuk pernyataan import untuk pakej net/http tetapi tidak menggunakan fungsinya. Walaupun begitu, mesej ralat "jalan buntu" tidak dihasilkan.
Penjelasan
Mengimport pakej bersih memulakan tinjauan latar belakang Goroutine yang melumpuhkan pengesan jalan buntu dengan berkesan. Pengesan jalan buntu bergantung pada keupayaan masa jalan untuk mengesan apabila saluran tidak menerima sebarang data. Walau bagaimanapun, tinjauan latar belakang Goroutines menjana aktiviti saluran terputus-putus, yang memperdaya pengesan jalan buntu dan menghalangnya daripada melaporkan kebuntuan.
Contoh
Pertimbangkan kod berikut:
package main import ( "fmt" "net/http" ) func main() { var ch = make(chan int) ch <- 1 }
Jika import bersih/http dialih keluar, kod tersebut akan menjana ralat "kebuntuan" yang dijangkakan kerana saluran itu tidak pernah menerima sebarang data daripada Goroutine lain. Walau bagaimanapun, dengan import bersih/http hadir, tinjauan latar belakang Goroutines menyediakan aktiviti saluran yang diperlukan untuk mengelakkan ralat jalan buntu daripada dilaporkan.
Bacaan Lanjut
Tingkah laku ini dibincangkan dengan lebih terperinci dalam isu GitHub berikut: https://github.com/golang/go/issues/12734
Atas ialah kandungan terperinci Mengapa Kod Yang Diberikan Mengelakkan Ralat \'Kebuntuan\' Walaupun Mengimport Pakej net/http?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!