為什麼這段程式碼沒有回死鎖錯誤?
提供的程式碼導入了 net/http 包,該包初始化執行的 Goroutine後台投票。這會無意中停用死鎖偵測器,從而阻止傳回預期的死鎖錯誤。
要理解此行為,請考慮程式碼摘錄:
<code class="go">package main import ( "fmt" "net/http" ) func main() { var ch = make(chan int) ch <- 1 }</code>
在這種情況下,main 函數會建立一個通道並向其中發送一個值,這可能會導致死鎖。但是,由於已匯入 net/http 套件,因此死鎖偵測器已停用並且不會傳回任何錯誤。
如果刪除導入:
<code class="go">package main import "fmt" func main() { var ch = make(chan int) ch <- 1 }</code>
死鎖錯誤現在已正確返回,因為後台輪詢 Goroutine 未啟動。
此行為與 GitHub 問題中的討論一致:https://github.com/golang/go/issues/12734,其中解釋說導入net/http 套件禁用死鎖偵測器。
以上是為什麼導入Net/Http包時死鎖偵測被禁用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!