首頁 >後端開發 >Golang >為什麼導入Net/Http包時死鎖偵測被禁用?

為什麼導入Net/Http包時死鎖偵測被禁用?

Barbara Streisand
Barbara Streisand原創
2024-10-24 09:42:30729瀏覽

Why is Deadlock Detection Disabled When Importing the Net/Http Package?

為什麼這段程式碼沒有回死鎖錯誤?

提供的程式碼導入了 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn