為什麼這段程式碼沒有回死鎖錯誤?
提供的程式碼導入了 net/http 包,該包初始化執行的 Goroutine後台投票。這會無意中停用死鎖偵測器,從而阻止傳回預期的死鎖錯誤。
要理解此行為,請考慮代碼摘錄:
package main
import (
"fmt"
"net/http"
)
func main() {
var ch = make(chan int)
ch 在這種情況下,main 函數會建立一個通道並向其中發送一個值,這可能會導致死鎖。但是,由於已匯入 net/http 套件,因此死鎖偵測器已停用並且不會傳回錯誤。
如果刪除導入:
package main
import "fmt"
func main() {
var ch = make(chan int)
ch 現在可以正確地回傳死鎖錯誤,因為後台輪詢 Goroutine 未啟動。
此行為與 GitHub Issue 中的討論一致:https://github.com/golang /go/issues/12734,其中解釋了導入 net/http 套件會停用死鎖偵測器。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3